开发环境
- Windows11, version 24H2(傻逼才升级24H2,建议22H2)
- WSL2,发行版 Ubuntu-22.04
- Docker Desktop 最新版
BUG复现
环境设置
使用 Clash for Windows 开启系统代理,开放端口7890并开启局域网代理(LAN enabled)。
在 Windows 上安装 Docker Desktop 后,查看 Docker Desktop >> Settings >> Resources >> Proxy
可发现其会自动识别 Windows 系统代理。

Windows 中系统代理可以在 设置 >> 网络和Internet >> 代理
中查看。

可以看到,Docker Desktop 读取系统代理为 http://127.0.0.1:7897
。
进入WSL2使用Docker
从 Windows 进入 WSL2 CLI 后,输入指令 docker pull hello-world
报错:docker pull proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused
。这是经典的 因 Docker 代理设置不当 导致的传输问题。
排除BUG
在 WSL2 CLI 界面输入 env | grep -i proxy
来查看当前 bash 对话环境下的系统代理,发现如下内容:
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=https://127.0.0.1:7897
这些内容也可以通过 docker info | grep -i proxy
获得。
因为 Windows Subsystem 的网络设计是将宿主机和 WSL2 虚拟机网卡分开设置的,所以 127.0.0.1 在宿主机和 WSL2 环境中指代的是不同的IP地址!
解决BUG
更换 Clash 客户端
将 Clash for Windows 换成 Clash Verge,并启用其中的 TUN(虚拟网卡)设置:

设置 Docker Desktop 的代理
在 Windows PowerShell 输入 ipconfig
查看宿主机IP地址后,将其替换127.0.0.1,并输入 Docker Desktop Proxy 设置中去。也就是显式地指定代理的IP地址。

成功解决问题,现在 docker pull
能够正常拉取云端镜像。

Comments | NOTHING