docker使用代理的各种姿势
Docker 在使用代理时,主要有两种类型的代理配置:Docker 守护进程代理和容器内代理。以下是这两种方式的详细介绍以及配置方法。
Docker 守护进程代理
Docker 守护进程(dockerd)在执行 docker pull 等命令时需要使用代理。配置守护进程的代理通常涉及到 systemd 的配置。
配置步骤
-
创建配置目录和文件:
sudo mkdir -p /etc/systemd/system/docker.service.d sudo touch /etc/systemd/system/docker.service.d/proxy.conf -
编辑
proxy.conf文件,添加以下内容:[Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" Environment="NO_PROXY=localhost,127.0.0.1,.example.com"这里的
proxy.example.com:8080需要替换为实际可用的代理地址。 -
重载
systemd配置并重启 Docker 服务:sudo systemctl daemon-reload sudo systemctl restart docker
注意事项
- 配置完成后,可以通过命令
systemctl show docker --property Environment检查环境变量是否正确加载。 - 如果使用 HTTPS 代理,确保代理服务器能够处理 TLS 握手。
容器内代理
容器内的代理配置可以通过环境变量或 Docker 配置文件来实现。
通过环境变量配置
在运行容器时,可以直接通过 -e 参数传递环境变量:
docker run -e HTTP_PROXY="http://proxy.example.com:8080" \
-e HTTPS_PROXY="http://proxy.example.com:8080" \
-e NO_PROXY="localhost,127.0.0.1,.example.com" \
your/image:tag
通过配置文件设置
对于 Docker 17.07 及以上版本,可以在用户目录下的 ~/.docker/config.json 中添加以下内容:
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}
这种方法适合个人开发环境,所有新启动的容器都会自动应用这些代理设置。
Docker Build 时的代理
在构建镜像时,用户级配置无效,需要通过构建参数显式传递代理信息:
docker build . \
--build-arg HTTP_PROXY="http://proxy.example.com:8080/" \
--build-arg HTTPS_PROXY="http://proxy.example.com:8080/" \
--build-arg NO_PROXY="localhost,127.0.0.1,.example.com" \
-t your/image:tag
网络设置
无论是 docker run 还是 docker build,默认情况下网络是隔绝的。如果使用本地代理(如 localhost:3128),需要加上 --network host 参数才能正常工作。
总结
Docker 的代理配置涉及到多个方面,包括守护进程和容器内的设置。根据不同的需求选择合适的方法进行配置,可以有效解决因网络限制导致的问题。
Citations:
[1] https://www.rickylss.site/network/docker/2022/03/17/docker-proxy/
[2] https://note.qidong.name/2020/05/docker-proxy/
[3] https://cloud-atlas.readthedocs.io/zh-cn/latest/docker/network/docker_proxy.html
[4] https://cloud.tencent.com/developer/article/1806455
[5] https://skywt.cn/blog/docker-proxy-configuration/
[6] https://blog.csdn.net/2401_85480529/article/details/139693869
[7] https://blog.csdn.net/liangfenxuegao/article/details/130952170
[8] https://www.lfhacks.com/tech/pull-docker-images-behind-proxy/
浙公网安备 33010602011771号