帮助中心 >  产品文档 >  Docker网络代理配置全攻略

欢迎来到蓝队云小课堂。在现代软件开发和部署过程中,Docker因其轻量级和便捷性而广受欢迎。然而,在某些网络环境下,直接访问外部网络资源可能会受到限制,这时就需要配置网络代理来确保Docker的正常运行。本文将详细介绍如何在不同场景下为Docker配置网络代理,包括守护进程dockerd、容器运行和构建时的代理配置方法,并强调不同场景下的适用性。

 

代理信息示例

假设我们使用的代理服务器地址为:10.0.0.1:8080,我们将以此地址为例进行配置。

 

Dockerd 代理配置

当执行docker pull命令时,实际上是由守护进程dockerd来执行的。因此,我们需要在dockerd的环境中配置代理,而这个环境受systemd管控。以下是具体的配置步骤:

 

1. 创建配置目录并添加代理配置文件

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker
.service.d/proxy.conf

 

2. 在proxy.conf文件中添加以下内容:

[Service]
Environment=
"HTTP_PROXY=http://www.landui.com:8080"
Environment=
"HTTPS_PROXY=http://www.landui.com:8080"
Environment=
"NO_PROXY=localhost,127.0.0.1,.mycompany.com"

 

3. 重载systemd配置并重启dockerd服务以使配置生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

 

 

Container 代理配置

在容器运行阶段,如果需要通过代理上网,我们可以配置~/.docker/config.json文件。以下配置在Docker 17.07及以上版本生效。

 

1. 编辑~/.docker/config.json文件,添加或修改proxies部分:

{
  "proxies": {
    "default": {
      "httpProxy":
"http://www.landui.com:8080",
      "httpsProxy":
"http://www.landui.com:8080",
      "noProxy":
"localhost,127.0.0.1,.mycompany.com"
    }
  }
}

 

2. 这种方法适用于个人开发环境,因为它会在所有配置修改后启动的容器中生效。对于CI/CD的自动构建环境或上线运行环境,建议使用显式配置,如在容器运行时通过-e注入环境变量,以减少对构建、部署环境的依赖。

 

 

Docker Build 代理配置

虽然docker build本质上也是启动一个容器,但其环境略有不同,用户级配置在此不适用。在构建时,需要注入http_proxy等参数。

 

1. 使用以下命令进行构建,并注入代理参数:

docker build . \\
  --build-arg
"HTTP_PROXY=http://www.landui.com:8080" \\
  --build-arg
"HTTPS_PROXY=http://www.landui.com:8080" \\
  --build-arg
"NO_PROXY=localhost,127.0.0.1,.mycompany.com" \\
  -t your/image:tag

 

注意事项

- 无论是docker run还是docker build,默认情况下网络是隔绝的。如果代理使用的是localhost:3128这类地址,则会无效。这类仅限本地的代理必须加上--network host才能正常使用,而一般则需要配置代理的外部IP,且代理本身要开启Gateway模式。

- docker build代理是在执行前设置的,所以修改后,下次执行立即生效。

通过上述步骤,我们可以为Docker配置网络代理,确保在受限网络环境下也能顺利进行容器的拉取、运行和构建。

 

蓝队云官网上拥有完善的技术支持库,你可以在这里找到更多的帮助和资源。如果你有任何技术问题,也欢迎直接咨询我们。同时,蓝队云还整理了运维必备的工具包,免费分享给大家使用,需要的朋友可以直接咨询。

 

更多技术知识,蓝队云期待与你一起探索。让我们一起在技术的海洋中航行,发现更多的秘密和宝藏。

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: