由于网络原因,需要为docker配置网络代理,配置docker网络适用三种场景,具体实现与Linux设置 http_proxy
环境变量原理相同。
Dockerd代理配置
在执行docker pull
拉取时是由dockerd
守护进程来执行的,所以需要在dockerd
中配置代理,而dockerd
受systemd
管控,因此只需对 systemd
进行配置即可。
Source Code
- sudo mkdir -p /etc/systemd/system/docker.service.d
- sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在创建的 proxy.conf
文件中键入以下内容,当然 proxy.conf
文件的名称可以是任意,只需后缀为 .conf
即可。
Source Code
- [Service]
- Environment="HTTP_PROXY=http://proxy.com:8080/"
- Environment="HTTPS_PROXY=http://proxy.com:8080/"
- Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
复制 文本
重启生效。
Source Code
- sudo systemctl daemon-reload
- sudo systemctl restart docker
在本文中,proxy.com:8080
要更换为可用的免密代理。
Container容器代理
在容器运行阶段,需要使用代理网络,则直接配置 ~/.docker/config.json
文件。
Source Code
- {
- "proxies":
- {
- "default":
- {
- "httpProxy": "http://proxy.com:8080",
- "httpsProxy": "http://proxy.com:8080",
- "noProxy": "localhost,127.0.0.1,.example.com"
- }
- }
- }
复制 文本
这是用户级别的配置方式,除此之外,还可以通过 -e 参数来注入 http_proxy 环境变量,具体实
Docker Build 代理
虽然 docker build
的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy
等参数。
Source Code
- docker build . \
- --build-arg "HTTP_PROXY=http://proxy.com:8080/" \
- --build-arg "HTTPS_PROXY=http://proxy.com:8080/" \
- --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
- -t your/image:tag