Docker从入门到精通——HTTP/HTTPS 代理
HTTP/HTTPS 代理
Docker 守护程序在其启动环境中使用 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量来配置 HTTP 或 HTTPS 代理。NO_PROXY 您不能使用该 daemon.json 文件配置这些环境变量。
此示例覆盖默认 docker.service
文件。
如果您在 HTTP 或 HTTPS 代理服务器后面,例如在公司设置中,则需要在 Docker systemd 服务文件中添加此配置。
Note for rootless mode
在 rootless mode 运行 Docker 时,systemd 配置文件的位置是不同的。在 rootless 模式下运行时,Docker 作为用户模式 systemd 服务启动,并使用存储在每个用户主目录中的文件
~/.config/systemd/user/docker.service.d/
。此外,systemctl
必须在不带sudo
和带--user
标志的情况下执行。如果您在无根模式下运行 Docker,请选择下面的“无根模式”选项卡。
1、regular install
-
为 docker 服务创建一个 systemd 插入目录:
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:80"
如果您在 HTTPS 代理服务器后面,请设置
HTTPS_PROXY
环境变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443"
可以设置多个环境变量;设置非 HTTPS 和 HTTPS 代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443"
-
如果您有内部 Docker 注册表需要在不使用代理的情况下联系,您可以通过
NO_PROXY
环境变量指定它们。该
NO_PROXY
变量指定一个字符串,其中包含应从代理中排除的主机的逗号分隔值。这些是您可以指定以排除主机的选项:- IP 地址前缀 (
1.2.3.4
) - 域名或特殊的 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。以“.”开头的域名仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
匹配example.com
和foo.example.com
, 和.example.com
仅匹配foo.example.com
- 单个星号 (
*
) 表示不应进行代理 - IP 地址前缀接受IP地址端口号(1.2.3.4:80)和域名 (
foo.example.com:80
)。
配置示例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
- IP 地址前缀 (
-
刷新更改并重新启动 Docker
sudo systemctl daemon-reload sudo systemctl restart docker
-
验证配置是否已加载并与您所做的更改相匹配,例如:
sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
2、rootless mode
-
为 docker 服务创建一个 systemd 插入目录:
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:80"
如果您在 HTTPS 代理服务器后面,请设置
HTTPS_PROXY
环境变量:[Service] Environment="HTTPS_PROXY=https://proxy.example.com:443"
可以设置多个环境变量;设置非 HTTPS 和 HTTPS 代理;
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443"
-
如果您有内部 Docker 注册表需要在没有代理的情况下联系,您可以通过
NO_PROXY
环境变量指定它们。该
NO_PROXY
变量指定一个字符串,其中包含应从代理中排除的主机的逗号分隔值。这些是您可以指定以排除主机的选项:- IP 地址前缀 (
1.2.3.4
) - 域名或特殊的 DNS 标签 (
*
) - 域名与该名称和所有子域匹配。以“.”开头的域名仅匹配子域。例如,给定域
foo.example.com
和example.com
:example.com
匹配example.com
和foo.example.com
, 和.example.com
仅匹配foo.example.com
- 单个星号 (
*
) 表示不应进行代理 IP 地址前缀接受IP地址端口号(1.2.3.4:80)和域名 (foo.example.com:80)。
配置示例:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
- IP 地址前缀 (
-
刷新更改并重新启动 Docker
systemctl --user daemon-reload systemctl --user restart docker
-
验证配置是否已加载并与您所做的更改相匹配,例如:
systemctl --user show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp