概述
我们将提供代理设置给Docker引擎和客户端,以便它们在无法直接访问互联网时仍能连接到互联网。当我们使用Docker在企业网络或私有云中时,通常需要通过代理服务器连接到互联网。在这种情况下,我们需要使用代理。
在本教程中,我们将学习如何解决配置Docker代理时可能遇到的问题。
什么是代理
代理服务器 控制并路由请求用户与网站之间的流量。代理旨在保护用户并维护网络安全和隐私政策。没有代理,用户直接向目标服务器发送请求并接收响应:
当我们使用代理时,我们的请求首先到达代理服务器,然后由代理访问目标服务器。如下图所示,代理位于客户端和目标服务器之间,每个客户端的请求都首先到达代理,然后代理向目标服务器提供访问权限:
配置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_PROXY
、HTTPS_PROXY
、FTP_PROXY
和NO_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中进行配置。