0%

记录WSL2+Docker网络问题

记录WSL2+Docker网络问题

刚在WSL2上安装Docker时没有问题,主机也能正常访问docker容器中的镜像。

电脑重启过后,再重新在wsl2中启动docker和镜像时,主机就无法访问了

探索过程

  1. 根据网上的教程,查看IP是否能ping通,确保windows这边获取的两个IP才能ping通

    两个IP分别指的是ipconfig中查看到的Ethernet adapter vEthernet (WLAN):的地址和Ethernet adapter vEthernet (WSL):地址

  2. 上述过程完成后,发现还是无法连接,然后测试网络问题发现如下现象:

    在docker服务启动前:所有连接都能ping通;在docker服务启动后会出现DNS解析错误

  3. 发现了是和DNS解析有关,然后查看相关文件:cat /etc/resolv.conf,发现:

    nameserver 172.18.0.1

  4. 再启动docker服务之后,查看网络配置:ifconfig,发现:

    docker0: flags=4163 mtu 1500

    inet 172.18.0.1 netmask 255.255.255.0 broadcast 172.18.0.1

  5. 可以看到,docker的inet和nameserver冲突了,然后尝试解决问题

解决问题

先尝试修改DNS配置

  1. 添加/etc/wsl.conf,配置

    1
    2
    [network]
    generateResolvConf = false
  2. 根据网上教程修改/etc/resolv.conf,配置静态DNS地址

  3. 结果配置完之后,重启WSL后,/etc/resolv.conf会被自动删除

  4. 再尝试将修改/etc/resolv.conf的过程写到.bashrc中,设置成开启终端时自动执行

  5. 结果是权限不够,因为我是用的普通用户登录

  6. 这一条路暂时放弃

尝试修改docker网络配置

  1. 停止docker服务:sudo service docker stop

  2. 修改/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"
    }
  3. 重启docker服务:sudo service docker start

  4. 尝试再从windows去连接wsl中的docker中的镜像,连接成功

  5. 问题解决!