本文最后更新于 2025-07-29T15:30:57+08:00
参考总结自SkyWT的博客
Docker daemon代理
问题:从DockerHub拉取镜像时可能出现网络问题。
解决方案:在 /etc/systemd/system/docker.service.d/http-proxy.conf
编写 systemd 配置,配置 HTTP 和 HTTPS 代理:
1 2 3
| [Service] Environment="HTTP_PROXY=http://127.0.0.1:1080" Environment="HTTPS_PROXY=http://127.0.0.1:1080"
|
配置完之后重新加载配置文件并重启docker:
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
note:不同的发行版中service文件的位置不一样,在archlinux中位于/usr/lib/systemd/system/docker.service
AI的答案
直接更改系统设置每次更新系统重启之后就会被覆盖,新建一个目录保存配置:
1
| sudo mkdir -p /etc/systemd/system/docker.service.d
|
1 2 3 4
| [Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1"
|
1 2 3 4 5
| systemctl daemon-reexec systemctl daemon-reload systemctl restart docker
systemctl show --property=Environment docker
|
容器内代理
问题:配置每个容器的代理环境变量较繁琐。
解决方案:在 ~/.docker/config.json
中设置全局代理配置。
1 2 3 4 5 6 7 8 9
| { "proxies": { "default": { "httpProxy": "http://example:1080", "httpsProxy": "http://example:1080", "noProxy": "*.test.example.com,.example.org,127.0.0.0/8,192.168.0.0/16" } } }
|
note:使用sudo启动的容器,配置文件按照/root/.docker/config.json
,并且,这里的proxy如果设置为localhost
或者127.0.0.1
,指的是容器自己的地址。
Build代理
问题:docker build 时网络问题。
解决方案:使用docker build
时添加参数--network=host
设置build网络。或者在docker-compose.yml
中设置:
1 2 3 4
| build: context: . network: host dockerfile: Dockerfile
|
然后在Dockerfile
中设定环境变量:
1 2 3 4
| ENV http_proxy="http://127.0.0.1:1080" ENV HTTP_PROXY="http://127.0.0.1:1080" ENV https_proxy="http://127.0.0.1:1080" ENV HTTPS_PROXY="http://127.0.0.1:1080"
|
Reference