docker使用代理的各种姿势

Docker 在使用代理时,主要有两种类型的代理配置:Docker 守护进程代理容器内代理。以下是这两种方式的详细介绍以及配置方法。

Docker 守护进程代理

Docker 守护进程(dockerd)在执行 docker pull 等命令时需要使用代理。配置守护进程的代理通常涉及到 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://proxy.example.com:8080/"
    Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
    Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
    

    这里的 proxy.example.com:8080 需要替换为实际可用的代理地址。

  3. 重载 systemd 配置并重启 Docker 服务

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

注意事项

  • 配置完成后,可以通过命令 systemctl show docker --property Environment 检查环境变量是否正确加载。
  • 如果使用 HTTPS 代理,确保代理服务器能够处理 TLS 握手。

容器内代理

容器内的代理配置可以通过环境变量或 Docker 配置文件来实现。

通过环境变量配置

在运行容器时,可以直接通过 -e 参数传递环境变量:

docker run -e HTTP_PROXY="http://proxy.example.com:8080" \
           -e HTTPS_PROXY="http://proxy.example.com:8080" \
           -e NO_PROXY="localhost,127.0.0.1,.example.com" \
           your/image:tag

通过配置文件设置

对于 Docker 17.07 及以上版本,可以在用户目录下的 ~/.docker/config.json 中添加以下内容:

{
  "proxies": {
    "default": {
      "httpProxy": "http://proxy.example.com:8080",
      "httpsProxy": "http://proxy.example.com:8080",
      "noProxy": "localhost,127.0.0.1,.example.com"
    }
  }
}

这种方法适合个人开发环境,所有新启动的容器都会自动应用这些代理设置。

Docker Build 时的代理

在构建镜像时,用户级配置无效,需要通过构建参数显式传递代理信息:

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

网络设置

无论是 docker run 还是 docker build,默认情况下网络是隔绝的。如果使用本地代理(如 localhost:3128),需要加上 --network host 参数才能正常工作。

总结

Docker 的代理配置涉及到多个方面,包括守护进程和容器内的设置。根据不同的需求选择合适的方法进行配置,可以有效解决因网络限制导致的问题。

Citations:
[1] https://www.rickylss.site/network/docker/2022/03/17/docker-proxy/
[2] https://note.qidong.name/2020/05/docker-proxy/
[3] https://cloud-atlas.readthedocs.io/zh-cn/latest/docker/network/docker_proxy.html
[4] https://cloud.tencent.com/developer/article/1806455
[5] https://skywt.cn/blog/docker-proxy-configuration/
[6] https://blog.csdn.net/2401_85480529/article/details/139693869
[7] https://blog.csdn.net/liangfenxuegao/article/details/130952170
[8] https://www.lfhacks.com/tech/pull-docker-images-behind-proxy/

posted on 2024-10-27 12:52  永恒的终结  阅读(304)  评论(0)    收藏  举报