讓 WSL2 與 Docker Desktop 走 Clash 代理
WSL2 跑在獨立的虛擬網路裡,Windows 的系統代理設定對它完全無效。子系統裡的 curl、apt、git 想走代理,必須手動指向宿主機。
第一步:允許區域網連線
在 General 頁面開啟 Allow LAN。不開這個開關,Clash 只監聽 127.0.0.1,WSL2 從虛擬網絡卡過來的連線會被直接拒絕——這是最常見的「照著教程配了但連不上」的原因。
第二步:在 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 在專用網路下是允許的。