守护程序代理配置
如果您的组织使用代理服务器连接到互联网,您可以 需要配置 Docker 守护进程以使用 proxy 服务器。守护进程使用 一个代理服务器,用于访问存储在 Docker Hub 和其他注册表中的镜像, 并访问 Docker 群中的其他节点。
本页介绍如何为 Docker 守护程序配置代理。为 有关为 Docker CLI 配置代理设置的说明,请参阅配置 Docker CLI 使用代理服务器。
重要
在
daemon.json
被 Docker 忽略 桌面。如果您使用 Docker Desktop,则可以使用 Docker Desktop 设置配置代理。
有两种方法可以配置这些设置:
直接配置守护进程优先于环境变量。
守护进程配置
您可以在daemon.json
文件
或使用 CLI 标志--http-proxy
或--https-proxy
flags 的dockerd
命令。配置 usingdaemon.json
推荐。
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
更改配置文件后,重启守护进程,代理配置才能生效:
$ sudo systemctl restart docker
环境变量
Docker 守护程序在其启动时检查以下环境变量 环境来配置 HTTP 或 HTTPS 代理行为:
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
NO_PROXY
no_proxy
systemd 单元文件
如果您将 Docker 守护进程作为 systemd 服务运行,则可以创建一个
systemd 插入式文件,该文件为docker
服务。
无根模式注意事项
运行 Docker 时,systemd 配置文件的位置不同 在无根模式下。当 无根模式,Docker 作为用户态 systemd 服务启动,并使用 存储在每个用户主目录中的文件
~/.config/systemd/<user>/docker.service.d/
.另外systemctl
必须 执行而不sudo
并使用--user
旗。选择“无根” mode“选项卡。
为
docker
服务:$ sudo mkdir -p /etc/systemd/system/docker.service.d
创建一个名为
/etc/systemd/system/docker.service.d/http-proxy.conf
这会添加HTTP_PROXY
环境变量:[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128"
如果您在 HTTPS 代理服务器后面,请将
HTTPS_PROXY
环境 变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:3129"
可以设置多个环境变量;以同时设置非 HTTPS 和 HTTPs 代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129"
注意
代理值中的特殊字符,例如
#?!()[]{}
,必须为 double 使用 转义 。例如:%%
[Service] Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%23pass@proxy.example.com:3128/"
如果您有需要联系的内部 Docker 注册表,而无需 proxying,您可以通过
NO_PROXY
环境变量。这
NO_PROXY
variable 指定包含逗号分隔的字符串 应从代理中排除的主机的值。这些是选项 您可以指定排除主机:- IP 地址前缀 (
1.2.3.4
) - 域名或特殊 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。具有
前导 “.” 仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
比赛example.com
和foo.example.com
和.example.com
仅匹配项foo.example.com
- 单个星号 () 表示不应进行代理
*
- 文本端口号由 IP 地址前缀 (
1.2.3.4:80
) 和 域名 (foo.example.com:80
)
例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
- IP 地址前缀 (
刷新更改并重启 Docker
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
验证配置是否已加载并与您所做的更改匹配 made 等实例:
$ sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:3128 HTTPS_PROXY=https://proxy.example.com:3129 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
为
docker
服务:$ mkdir -p ~/.config/systemd/user/docker.service.d
创建一个名为
~/.config/systemd/user/docker.service.d/http-proxy.conf
这会添加HTTP_PROXY
环境变量:[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128"
如果您在 HTTPS 代理服务器后面,请将
HTTPS_PROXY
环境 变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:3129"
可以设置多个环境变量;以同时设置非 HTTPS 和 HTTPs 代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129"
注意
代理值中的特殊字符,例如
#?!()[]{}
,必须为 double 使用 转义 。例如:%%
[Service] Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%23pass@proxy.example.com:3128/"
如果您有需要联系的内部 Docker 注册表,而无需 proxying,您可以通过
NO_PROXY
环境变量。这
NO_PROXY
variable 指定包含逗号分隔的字符串 应从代理中排除的主机的值。这些是选项 您可以指定排除主机:- IP 地址前缀 (
1.2.3.4
) - 域名或特殊 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。具有
前导 “.” 仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
比赛example.com
和foo.example.com
和.example.com
仅匹配项foo.example.com
- 单个星号 () 表示不应进行代理
*
- 文本端口号由 IP 地址前缀 (
1.2.3.4:80
) 和 域名 (foo.example.com:80
)
例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
- IP 地址前缀 (
刷新更改并重启 Docker
$ systemctl --user daemon-reload $ systemctl --user restart docker
验证配置是否已加载并与您所做的更改匹配 made 等实例:
$ systemctl --user show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:3128 HTTPS_PROXY=https://proxy.example.com:3129 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp