如何优雅的给 Docker 配置网络代理

原文链接:https://www.cnblogs.com/Chary/p/18096678 作者:CharyGao(博客园 · 硅基文明) 有时因为网络原因,比如公司 NAT,需要使用代理。Docker 的代理配置略显复杂,因为有三种场景。但基本原理都是一致的,都是利用 Linux 的 http_proxy 等环境变量。 Dockerd 代理 在执行 docker pull 时,是由守护进程 dockerd 来执行。因此,代理需要配在 dockerd 的环境中。而这个环境受 systemd 所管控,因此实际是 systemd 的配置。 1 2 sudo mkdir -p /etc/systemd/system/docker.service.d sudo touch /etc/systemd/system/docker.service.d/proxy.conf 在这个 proxy.conf 文件(可以是任意 *.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" 其中 proxy.example.com:8080 要换成可用的免密代理。通常使用 cntlm 在本机自建免密代理,去对接公司的代理。 Container 代理 在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置只在 Docker 17.07 及以上版本生效。 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" } } } 这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。 ...

March 26, 2024 · 2 min · CharyGao