守护程序代理配置
如果您的组织使用代理服务器连接到互联网,您可以 需要配置 Docker 守护进程以使用 proxy 服务器。守护进程使用 一个代理服务器,用于访问存储在 Docker Hub 和其他注册表中的镜像, 并访问 Docker 群中的其他节点。
本页介绍如何为 Docker 守护程序配置代理。为 有关为 Docker CLI 配置代理设置的说明,请参阅配置 Docker CLI 使用代理服务器。
重要
Docker 会忽略 中指定的代理配置 桌面。如果您使用 Docker Desktop,则可以使用 Docker Desktop 设置配置代理。
daemon.json
有两种方法可以配置这些设置:
直接配置守护进程优先于环境变量。
守护进程配置
您可以在文件中为守护进程配置代理行为,
或者对命令使用 CLI 标志或 标志。建议使用 Configuration using。daemon.json
--http-proxy
--https-proxy
dockerd
daemon.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 服务启动,并使用 存储在 中每个用户主目录中的文件。此外,必须 在没有 和 有标志的情况下执行。选择“无根” mode“选项卡。
~/.config/systemd/<user>/docker.service.d/
systemctl
sudo
--user
为服务创建一个 systemd 插入式目录:
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"
注意
代理值中的特殊字符(如 ,)必须为双精度 使用 转义 。例如:
#?!()[]{}
%%
[Service] Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%23pass@proxy.example.com:3128/"
如果您有需要联系的内部 Docker 注册表,而无需 proxying,您可以通过环境变量指定它们。
NO_PROXY
该变量指定一个包含逗号分隔的字符串 应从代理中排除的主机的值。这些是选项 您可以指定排除主机:
NO_PROXY
- IP 地址前缀 (
1.2.3.4
) - 域名或特殊 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。具有
前导 “.” 仅匹配子域。例如,给定域 和 :
foo.example.com
example.com
example.com
matches 和 、 和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
为服务创建一个 systemd 插入式目录:
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"
注意
代理值中的特殊字符(如 ,)必须为双精度 使用 转义 。例如:
#?!()[]{}
%%
[Service] Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%23pass@proxy.example.com:3128/"
如果您有需要联系的内部 Docker 注册表,而无需 proxying,您可以通过环境变量指定它们。
NO_PROXY
该变量指定一个包含逗号分隔的字符串 应从代理中排除的主机的值。这些是选项 您可以指定排除主机:
NO_PROXY
- IP 地址前缀 (
1.2.3.4
) - 域名或特殊 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。具有
前导 “.” 仅匹配子域。例如,给定域 和 :
foo.example.com
example.com
example.com
matches 和 、 和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