docker配置各种代理

参考总结自SkyWT的博客[1]

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

容器内代理

问题:配置每个容器的代理环境变量较繁琐。
解决方案:在 ~/.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


docker配置各种代理
http://zr4in.github.io/2024/12/09/docker配置各种代理/
作者
zr4in
发布于
2024年12月9日
许可协议