在使用 Docker 的时候因为各种各样的原因经常会用到代理,但是有没有小伙伴在网上搜索发现代理设置了 Docker 不认呢,就让小编来带你看看怎么会事吧。
其实 Docker 的代理设置分为三种场景——CLI 下的、容器中的和构建时的。对应的具体使用场景分别是 docker pull
、容器运行过程中以及 docker build
过程中。
Docker pull
Docker CLI 的操作由 dockerd 执行,因此需要设置 systemd 的代理。
在文件 /etc/systemd/system/docker.service.d/proxy.conf
中写入:
1 2 3 4
| [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"
|
然后重启
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
容器中
容器运行过程中的代理在 Docker 自身的配置文件中设定:
1 2 3 4 5 6 7 8 9 10 11
| { "proxies": { "default": { "httpProxy": "http://proxy.example.com:8080", "httpsProxy": "http://proxy.example.com:8080", "noProxy": "localhost,127.0.0.1,.example.com" } } }
|
设置代理之前启动的容器不生效,需要重启容器。
Build
Build 过程也是在一个容器中,要让 build 过程走代理需要单独配置构建参数:
1 2 3 4 5
| 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 配置网络代理(存档)的笔记。