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

  1. 为 docker 服务创建一个 systemd 插入目录:

    sudo mkdir -p /etc/systemd/system/docker.service.d
  2. 创建一个名为/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"
  3. 如果您有内部 Docker 注册表需要在不使用代理的情况下联系,您可以通过 NO_PROXY 环境变量指定它们。

    NO_PROXY变量指定一个字符串,其中包含应从代理中排除的主机的逗号分隔值。这些是您可以指定以排除主机的选项:

    • IP 地址前缀 (1.2.3.4)
    • 域名或特殊的 DNS 标签 (*)
    • 域名与该名称和所有子域匹配。以“.”开头的域名仅匹配子域。例如,给定域 foo.example.comexample.com
      • example.com匹配example.comfoo.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
  4. 刷新更改并重新启动 Docker

    sudo systemctl daemon-reload
    sudo systemctl restart docker
  5. 验证配置是否已加载并与您所做的更改相匹配,例如:

    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
  2. 创建一个名为~/.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"
  3. 如果您有内部 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"
  4. 刷新更改并重新启动 Docker

    systemctl --user daemon-reload
    systemctl --user restart docker
  5. 验证配置是否已加载并与您所做的更改相匹配,例如:

    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
posted @ 2022-06-08 16:31  左扬  阅读(808)  评论(0编辑  收藏  举报
levels of contents