悠米是只猫

悠米是只猫

配置Docker CLI使用代理服务器

2025-04-03

本文介绍如何通过容器环境变量为Docker CLI配置代理设置。

注意事项

  • 本文不涉及Docker Desktop的代理配置,相关说明请参考"为Docker Desktop配置HTTP/HTTPS代理"

  • 如果您在没有Docker Desktop的情况下运行Docker Engine,请参考"配置Docker守护进程使用代理服务器"来为dockerd配置代理

容器代理配置方式

当容器需要使用HTTP、HTTPS或FTP代理服务器时,可以通过多种方式进行配置:

1. 配置Docker客户端

可以在~/.docker/config.json文件中添加代理配置,格式如下:

{
  "proxies": {
    "default": {
      "httpProxy": "http://代理服务器地址:3128",
      "httpsProxy": "https://代理服务器地址:3129",
      "noProxy": "*.测试域名.com,.example.org,127.0.0.0/8"
    }
  }
}

⚠️ 安全警告

  • 代理设置可能包含敏感信息(如认证信息、内部网络地址等)

  • 环境变量会以明文形式存储在容器配置中,可能通过远程API或被提交到镜像中

配置参数说明

参数

描述

httpProxy

设置HTTP_PROXY和http_proxy环境变量

httpsProxy

设置HTTPS_PROXY和https_proxy环境变量

ftpProxy

设置FTP_PROXY和ftp_proxy环境变量

noProxy

设置NO_PROXY和no_proxy环境变量

allProxy

设置ALL_PROXY和all_proxy环境变量

这些设置仅用于配置容器的代理环境变量,不适用于Docker CLI或Docker Engine本身的代理设置。

2. 运行容器时的代理配置

基于上述配置启动容器时,会自动设置相关环境变量:

docker run --rm alpine sh -c 'env | grep -i _PROXY'

3. 构建时的代理配置

执行构建时,代理相关的构建参数会自动预填充:

docker build \
  --no-cache \
  --progress=plain \
  - <<EOF
FROM alpine
RUN env | grep -i _PROXY
EOF

4. 为不同守护进程配置代理

可以为特定的守护进程配置单独的代理设置:

{
  "proxies": {
    "default": {
      "httpProxy": "http://默认代理:3128",
      "httpsProxy": "https://默认代理:3129"
    },
    "tcp://特定守护进程地址": {
      "noProxy": "*.内部域名.net"
    }
  }
}

5. 通过CLI命令行设置代理

可以在执行命令时直接指定代理设置:

# 构建时使用代理
docker build --build-arg HTTP_PROXY="http://代理地址:3128" .

# 运行容器时使用代理
docker run --env HTTP_PROXY="http://代理地址:3128" redis

重要建议

不要在Dockerfile中使用ENV指令设置代理
应该使用构建参数(build-arg)来配置代理

原因:

  1. 使用环境变量会将代理配置嵌入到镜像中

  2. 如果代理是内部代理,基于该镜像创建的容器可能无法访问

  3. 代理设置可能包含敏感信息,嵌入镜像存在安全风险