Docker 代理配置,适用于拉取镜像、容器内应用联网、构建镜像等场景。

▍场景一:Docker Daemon 代理(拉取镜像) 🌐

当 Docker Daemon 本身需要代理访问外部镜像仓库(如 Docker Hub)时:

1. Linux (Systemd 系统)

  • 创建服务覆盖配置:
    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo nano /etc/systemd/system/docker.service.d/http-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,*.internal"
    
  • 重载并重启 Docker:
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

2. Windows/macOS (Docker Desktop)

  • 打开 Docker Desktop → Settings → Resources → Proxies
  • 填入 HTTP/HTTPS 代理及白名单:
    HTTP Proxy:  http://proxy.example.com:8080
    HTTPS Proxy: http://proxy.example.com:8080
    Bypass:      localhost,127.0.0.1,*.internal
    

▍场景二:容器运行时代理(容器内应用访问外部网络) 📦

若容器内部应用需要走代理联网:

1. 单容器运行时指定变量

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" \
           your-image

2. 全局配置(修改 Docker 客户端配置)

  • 编辑 ~/.docker/config.json
    {
      "proxies": {
        "default": {
          "httpProxy": "http://proxy.example.com:8080",
          "httpsProxy": "http://proxy.example.com:8080",
          "noProxy": "localhost,127.0.0.1,*.corp"
        }
      }
    }
    
  • 重启 Docker

▍场景三:Build 时代理(构建镜像) 🛠️

Dockerfile 构建过程中需代理下载依赖:

FROM ubuntu

# 声明构建阶段的代理(仅对 RUN 指令有效)
ARG http_proxy=http://proxy.example.com:8080
ARG https_proxy=http://proxy.example.com:8080

RUN apt-get update && apt-get install -y some-package

或在构建命令中传参:

docker build --build-arg http_proxy=http://proxy.example.com:8080 \
             --build-arg https_proxy=http://proxy.example.com:8080 .

▍验证代理是否生效

# 查看 Docker Daemon 代理配置:
systemctl show --property=Environment docker

# 测试容器外网访问:
docker run --rm curlimages/curl -I https://google.com

▍注意事项 ⚠️

  1. 认证代理 若代理需账号密码,URL 格式为 http://user:password@proxy:port(注意特殊字符转义)
  2. NO_PROXY 配置 内网地址需加入白名单,避免流量绕行代理(如 192.168.0.0/16
  3. Daemon 与容器代理的区别 Daemon 代理影响镜像拉取,容器代理影响运行时网络

若需 企业级代理管理(如 PAC 自动配置),建议结合透明代理工具(如 squidcntlm)。