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

  1. 为 docker 服务创建一个 systemd 插入目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 创建一个名为

/etc/systemd/system/docker.service.d/http-proxy.conf

  1.  添加

HTTP_PROXY

  1. 环境变量的文件:
[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"
  1. 如果您有内部 Docker 注册表需要在不使用代理的情况下联系,您可以通过 

NO_PROXY 

  1. 环境变量指定它们。

NO_PROXY

  1. 变量指定一个字符串,其中包含应从代理中排除的主机的逗号分隔值。这些是您可以指定以排除主机的选项:
  • 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
  1. 刷新更改并重新启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 验证配置是否已加载并与您所做的更改相匹配,例如:
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

  1. 为 docker 服务创建一个 systemd 插入目录:
mkdir -p ~/.config/systemd/user/docker.service.d
  1. 创建一个名为

~/.config/systemd/user/docker.service.d/http-proxy.conf

  1.  添加

HTTP_PROXY

  1. 环境变量的文件:
[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"
  1. 如果您有内部 Docker 注册表需要在没有代理的情况下联系,您可以通过 

NO_PROXY 

  1. 环境变量指定它们。
    该 

NO_PROXY 

  1. 变量指定一个字符串,其中包含应从代理中排除的主机的逗号分隔值。这些是您可以指定以排除主机的选项:
  • 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"
  1. 刷新更改并重新启动 Docker
systemctl --user daemon-reload
systemctl --user restart docker
  1. 验证配置是否已加载并与您所做的更改相匹配,例如:
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