由于网络原因,需要为docker配置网络代理,配置docker网络适用三种场景,具体实现与Linux设置 http_proxy
环境变量原理相同。
Dockerd代理配置
在执行docker pull
拉取时是由dockerd
守护进程来执行的,所以需要在dockerd
中配置代理,而dockerd
受systemd
管控,因此只需对 systemd
进行配置即可。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在创建的 proxy.conf
文件中键入以下内容,当然 proxy.conf
文件的名称可以是任意,只需后缀为 .conf
即可。
[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"
重启生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
在本文中,
proxy.com:8080
要更换为可用的免密代理。Container容器代理
在容器运行阶段,需要使用代理网络,则直接配置 ~/.docker/config.json
文件。
{
"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
等参数。
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
本文作者为Mr.Bai,转载请注明。