要让 Docker 容器或 Docker 守护进程通过 SOCKS5 代理连接,通常有两种场景:让容器内的程序走代理,或者让 Docker Pull(拉取镜像)走代理。
假设你的代理地址是 192.168.1.138:10808,请参考以下配置方法:
1. 容器运行环境配置 (让容器内应用上网)
如果你希望在运行 docker run 时,容器内的程序(如 curl 或 apt)能通过代理访问外部网络,最简单的方法是设置环境变量。
命令行临时指定:
docker run -it \
-e all_proxy=socks5://192.168.1.138:10808 \
-e http_proxy=socks5://192.168.1.138:10808 \
-e https_proxy=socks5://192.168.1.138:10808 \
alpine sh
永久配置 (当前用户): 修改 ~/.docker/config.json,这样每次执行 docker run 都会自动注入这些变量:
{
"proxies": {
"default": {
"httpProxy": "socks5://192.168.1.138:10808",
"httpsProxy": "socks5://192.168.1.138:10808",
"noProxy": "localhost,127.0.0.1"
}
}
}
2. Docker 守护进程配置 (解决 Docker Pull 慢)
如果你是为了解决 docker pull 镜像时无法连接的问题,需要修改 Docker 服务的 systemd 配置。
创建配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
创建配置文件: 新建文件 /etc/systemd/system/docker.service.d/http-proxy.conf,写入以下内容:
[Service]
Environment="HTTP_PROXY=socks5://192.168.1.138:10808"
Environment="HTTPS_PROXY=socks5://192.168.1.138:10808"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.1.0/24"
重载并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker