问题描述:当我们在国内使用 docker 时,因为 GFW 的原因,有时会非常慢甚至连接不上。但是我配置了代理还是很慢,看了一下流量,根本没走代理。说明代理配置出了问题,但是我后续又进行了检验,确定不是机场的问题,因此肯定是 Docker 没配置好。
解决方法(此方法适配于使用clash进行代理,其他代理工具尚未进行测试)
在 Docker 代理设置中更换为
127.0.0.1:端口号
并重启 Docker可以看到终于走代理了
原因分析
原因是我使用的 Docker 后端基于 WSL 2,而WSL2 并不是与主机共用 ip ,因而代理无效。 Windows 的 WSL 网卡地址,比如:
❯ ipconfig
# output:
以太网适配器 vEthernet (WSL):
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::a99e:b411:2b0c:1ad6%47
IPv4 地址 . . . . . . . . . . . . : 172.30.112.1
子网掩码 . . . . . . . . . . . . : 255.255.240.0
默认网关. . . . . . . . . . . . . :
此解决方法本质上是进行二次转发, WSL2 先以 127.0.0.1:… 为代理,而后再进行转发。
之所以不采用网上流行的配置为 WSL2 IP 的方法,是因为 WSL2 的 IP 会动态变化,不够稳定(每次开启都需要修改,而这个方法可以手动固定clash 的端口,从而不用反复更改端口)。