目录
本文主要介绍以 WSL 形式运行的Ubuntu 22.04 LTS 下安装 docker 并通过宿主机的 clash 代理访问外网的配置流程。
WSL 网络配置
首先编辑 ~/.wslconfig ,将网络模式设置为 mirrored ,并关闭 dnsTunneling 。
[wsl2]
networkingMode=mirrored
dnsTunneling=false
firewall=true
autoProxy=true
Clash-verge 配置
在 clash 的设置中启用局域网连接,点击 局域网连接 旁边的小图标可以看到宿主机的本地 IP ,本文以 192.168.8.176 这个 IP 为例,在其他环境下设置时注意替换为自己的本地 IP. 在下面端口一栏可以看到 clash 代理的默认服务端口 7897 。


开启 mirrored 模式后,进入 WSL 中查看到的IP和宿主机IP相同

使用这个 IP ,以及 clash 的服务端口 7897 ,编辑 ~/.bashrc 添加环境变量:
host_ip=192.168.8.176
export http_proxy="http://$host_ip:7897"
export https_proxy="http://$host_ip:7897"
保存后执行 source ~/.bashrc 使环境变量设置生效。
APT 安装 Docker
接下来准备安装 Docker 相关组件。在正式安装 Docker 引擎之前,需要卸载任何可能冲突的软件包。
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
设置 Docker 的 APT 仓库
然后,需要设置 Docker 的 APT 仓库。之后,可以从该仓库安装和更新 Docker。
# 添加 Docker 的官方 GPG 密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 将仓库添加到 Apt 源列表:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完成后拉取并运行 hello-world 镜像验证安装是否成功:
sudo docker run hello-world
Dockerd 代理配置
如果拉取镜像时报错,说明需要给 docker daemon 另外配置代理:
zzm@DESKTOP-D4196DQ:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- 创建目录
sudo mkdir -p /etc/systemd/system/docker.service.d - 新建配置文件
/etc/systemd/system/docker.service.d/http-proxy.conf,这个文件中将包含环境变量:
[Service]
Environment="HTTP_PROXY=http://192.168.8.176:7897"
Environment="HTTPS_PROXY=http://192.168.8.176:7897"
重启服务使新配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
检查确认环境变量已经正确配置:
sudo systemctl show --property=Environment docker
容器代理配置
镜像启动后如果要在容器中使用代理,需要在启动时通过 --env 选项指定 HTTP_PROXY 环境变量或者在 ~/.docker/config.json 中添加默认的代理设置。
--env选项
docker run --env HTTP_PROXY="http://<user>:<password>@<domain>:<port>" <some-image>
config.json配置
{
"auths": {
"..."
},
"proxies": {
# 通用配置,会对当前客户端连接的所有Docker服务生效
"default": {
"httpProxy": "http://192.168.8.176:7897",
"httpsProxy": "http://192.168.8.176:7897",
"noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
}
运行成功后通过下面的命令验证相关环境变量是否符合预期:
docker run --rm alpine sh -c 'env | grep -i _PROXY'

