使用指南 / 进阶技巧

让 WSL2 与 Docker Desktop 走 Clash 代理

进阶技巧 · 2025-09-22 更新 · 约 2 分钟

WSL2 跑在独立的虚拟网络里,Windows 的系统代理设置对它完全无效。子系统里的 curlaptgit 想走代理,必须手动指向宿主机。

第一步:允许局域网连接

在 General 页面打开 Allow LAN。不开这个开关,Clash 只监听 127.0.0.1,WSL2 从虚拟网卡过来的连接会被直接拒绝——这是最常见的「照着教程配了但连不上」的原因。

合作推荐订阅链接从哪来?本站合作机场注册即送 1GB 香港高速体验流量,可直接一键导入。获取高速节点

第二步:在 WSL 里指向宿主机

宿主机在虚拟网络里的 IP 每次重启都可能变,从 /etc/resolv.conf 动态取更可靠。写进 ~/.bashrc

export hostip=$(grep nameserver /etc/resolv.conf | awk '{print $2}')
export http_proxy="http://$hostip:7890"
export https_proxy="http://$hostip:7890"

如果 WSL2 开了镜像网络模式(.wslconfig 里的 networkingMode=mirrored,需要 Windows 11),子系统和宿主机共用网络栈,直接写 127.0.0.1:7890 就行,上面这一串可以省掉。

Docker Desktop

拉镜像的是 Docker 守护进程,不受容器内环境变量影响,要在 Settings → Resources → Proxies 里填 http://host.docker.internal:7890。容器内部的程序要走代理是另一回事,得在 docker run 时单独传 -e http_proxy=...

最后一个坑:Windows 防火墙。首次从 WSL 连过来会被拦下且不弹提示,去防火墙的入站规则里确认 Clash for Windows 在专用网络下是允许的。