WSL的mirrored模式下docker部分容器启动失败(Already use)
- 检查是否指定容器IP
因为如果指定了容器IP而该IP已被使用的话,将会报错。 - 检查端口占用
wsl中使用命令:netstat -ap | grep {port}
来查看端口占用情况
win中使用命令:netstat -ano | findStr {port}
如果存在端口占用,酌情关闭占用程序或是使用别的端口 - 检查win的系统保留端口
Win将会保留一部分端口作为系统预留,如果需要的端口未被占用但是依旧提示Already use,则考虑是被系统保留了。
使用命令:netsh interface ipv4 show excludedportrange protocol=tcp
查看被保留的端口,检查自己需要使用的端口是否在范围内(带*的被排除,无需关注)。
如果需要使用的端口被保留,可以考虑:
- 使用别的端口
- 调整win的动态端口范围(动态的端口范围中的端口才可能会被选择为保留端口)
使用命令netsh interface ipv4 show dynamicportrange tcp
查看动态端口范围
使用命令netsh interface ipv4 set dynamicportrange protocol=tcp startport=10000 numberofports=20000
修改动态端口的起始和个数
重启生效 - 添加排除保留端口
使用命令netsh int ip add excludedportrange protocol=tcp startport=3121 numberofports=1
修改排除保留端口的起始和个数
WSL的mirrored模式下无法访问网络
- ping 127.0.0.1是否可以访问回环
如果不能访问可能是防火墙的问题?现在不太清楚。
解决方案 :在.wslconfig文件中添加(为什么这样做可以也不清楚):
[experimental]
firewall=true
- ping 宿主机是否可以访问
如果宿主机无法访问可能是不在一个子网中? - ping baidu.com无法访问
可能是路由问题
使用route
查看路由表,default一般是默认路由,flag为UG的指向网关,一般是这条路由的问题。ping这条路由的Gateway,如果不通则需要替换:
- 在win中使用命令tracert baidu.com来追踪路由,分析win使用的网关ip
- 在wsl中ping网关ip,应该是可以通的
- 使用命令
route del default gw {route命令中显示的default的gateway}
删除默认路由 - 使用命令
route add default gw {win中分析得到的网关ip}
添加路由