概述

我们将提供代理设置给Docker引擎和客户端,以便它们在无法直接访问互联网时仍能连接到互联网。当我们使用Docker在企业网络或私有云中时,通常需要通过代理服务器连接到互联网。在这种情况下,我们需要使用代理。

在本教程中,我们将学习如何解决配置Docker代理时可能遇到的问题。

什么是代理

代理服务器 控制并路由请求用户与网站之间的流量。代理旨在保护用户并维护网络安全和隐私政策。没有代理,用户直接向目标服务器发送请求并接收响应:

docker proxy2

当我们使用代理时,我们的请求首先到达代理服务器,然后由代理访问目标服务器。如下图所示,代理位于客户端和目标服务器之间,每个客户端的请求都首先到达代理,然后代理向目标服务器提供访问权限:

docker proxy1

配置Docker代理

在Docker 17.07及更高版本中,我们可以通过自动将代理信息传递给容器来配置Docker客户端。在Docker 17.06及更早版本中,可以通过环境变量设置Docker客户端的代理设置。

让我们将以下JSON示例添加到~/.docker/config.json文件中,并完成我们的代理设置。支持使用星号(*)作为通配符和CIDR表示法的IP地址:

{ 
  "proxies":
    { 
      "default": 
        { 
          "httpProxy": "http://<ip-address>:<port>", 
          "httpsProxy": "https://<ip-address>:<port>", 
          "noProxy": "*.<domain>,127.0.0.0/8" 
        } 
    } 
}

保存更改后,每个Docker容器都将创建为config.json文件中指定的环境变量,我们的代理设置将有效。

代理服务器设置

我们应该使用HTTP_PROXYHTTPS_PROXYFTP_PROXYNO_PROXY环境变量来配置Docker守护程序的代理服务。让我们详细查看这些变量:

  • HTTP_PROXY 是一种代理服务器,充当客户端与Web服务器之间的中介服务器。使用HTTP代理服务器时,请求不会直接到达网站;它以明文形式到达代理。代理分析此内容,然后通过(可选地)使用请求中提供的数据更改我们的IP地址,向网站发送新请求。网站接收请求并发送响应给代理。代理然后将响应转发给我们。
  • HTTPS_PROXY 相比HTTP代理更安全且匿名性更高。HTTPS协议不以明文格式传输数据。SSL层加密数据,确保第三方无法看到数据。
  • FTP_PROXY 管理活动和被动FTP会话。它还保护FTP服务器并限制客户端和服务器之间的FTP协议命令。
  • NO_PROXY 设置用于指定不应使用代理的地址。

手动配置代理设置

在Docker 17.07及更早版本中,我们必须使用--env标志设置我们的代理设置

docker run [docker_image] --env FTP_PROXY="ftp://<ip-address>:<port>"
docker run [docker_image] --env HTTP_PROXY="http://<ip-address>:<port>"
docker run [docker_image] --env HTTPS_PROXY="https://<ip-address>:<port>"
docker run [docker_image] --env NO_PROXY="*.<domain>,127.0.0.0/8"

或者,我们可以将它们添加到Dockerfile中:

ENV FTP_PROXY="ftp://<ip-address>:<port>"
ENV HTTP_PROXY="http://<ip-address>:<port>"
ENV HTTPS_PROXY="https://<ip-address>:<port>"
ENV NO_PROXY="*.<domain>,127.0.0.0/8"

执行这些操作后,我们现在可以进行Docker代理操作。

结论

在本教程中,我们学习了什么是代理以及如何在不同版本的Docker中进行配置。


« 上一篇: Docker 卷指南