如何给 WSL 使用宿主机 VPN 并配置 Docker
国内正常工作的 Docker 镜像站越来越少了, 导致配 Docker 环境也越来越痛苦了. 于是自然想到可以利用 VPN 给 Docker 做一个代理, 具体方法如下.
打开代理软件的这个设置:

找到代理软件的端口, 我用的 FlClash 端口号是 7890, 需要在防火墙新建一条规则放行入站.
(其实这一步理论上不做也行, 可以先跳过, 出问题了再回头试试.)
可以直接在管理员 PowerShell 里运行:
New-NetFirewallRule -DisplayName "Allow WSL Proxy 7890" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 7890 |
或者 Win+R 打开 wf.msc, 入站规则 - 新建规则 - 端口 - TCP - 本地端口输入 7890 - 允许连接, 然后一路下一步.
然后 Win11 有一个非常好的功能, 可以让 WSL 直接和 Windows 共享网络配置.
在用户文件夹 (例如 C:\Users\用户名, 如果找不到可以 Win+R 输入 %USERPROFILE%) 新建一个名叫 .wslconfig 的文件, 内容为:
[wsl2] |
然后 wsl --shutdown 重启 WSL.
在 WSL 的终端运行:
export http_proxy="http://127.0.0.1:7890" |
即可.
想测试可以运行 curl https://www.google.com, 有正常响应就是成功了, 如果很长时间没反应大概率是寄了.
需要关掉代理的时候, 运行:
unset HTTP_PROXY HTTPS_PROXY NO_PROXY http_proxy https_proxy no_proxy |
注意, 如果需要 sudo 执行某个需要代理的程序, 要带上 -E 参数, 否则 sudo 默认不会传递环境变量, 例如:
sudo -E ./installer |
Docker 配置需要在终端执行:
sudo mkdir -p /etc/systemd/system/docker.service.d |
写入:
[Service] |
然后重启 Docker:
sudo systemctl daemon-reload |
即可.