记录WSL2+Docker网络问题
刚在WSL2上安装Docker时没有问题,主机也能正常访问docker容器中的镜像。
电脑重启过后,再重新在wsl2中启动docker和镜像时,主机就无法访问了
探索过程
根据网上的教程,查看IP是否能ping通,确保windows这边获取的两个IP才能ping通
两个IP分别指的是ipconfig中查看到的
Ethernet adapter vEthernet (WLAN):
的地址和Ethernet adapter vEthernet (WSL):
地址上述过程完成后,发现还是无法连接,然后测试网络问题发现如下现象:
在docker服务启动前:所有连接都能ping通;在docker服务启动后会出现DNS解析错误
发现了是和DNS解析有关,然后查看相关文件:
cat /etc/resolv.conf
,发现:nameserver 172.18.0.1
再启动docker服务之后,查看网络配置:
ifconfig
,发现:docker0: flags=4163 mtu 1500
inet 172.18.0.1 netmask 255.255.255.0 broadcast 172.18.0.1
可以看到,docker的inet和nameserver冲突了,然后尝试解决问题
解决问题
先尝试修改DNS配置
添加
/etc/wsl.conf
,配置1
2[network]
generateResolvConf = false根据网上教程修改
/etc/resolv.conf
,配置静态DNS地址结果配置完之后,重启WSL后,
/etc/resolv.conf
会被自动删除再尝试将修改
/etc/resolv.conf
的过程写到.bashrc
中,设置成开启终端时自动执行结果是权限不够,因为我是用的普通用户登录
这一条路暂时放弃
尝试修改docker网络配置
停止docker服务:
sudo service docker stop
修改
/etc/docker/daemon.json
:(重点在于"bip"配置)1
2
3
4
5
6
7
8{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"bip": "172.18.1.8/24"
}重启docker服务:
sudo service docker start
尝试再从windows去连接wsl中的docker中的镜像,连接成功
问题解决!