docker配置代理

最后发布时间 : 2026-05-31 21:31:55 浏览量 :

Docker 的代理配置分为三个层面,分别对应不同的使用场景。下面逐一介绍:


Docker 守护进程代理(影响 docker pull

docker pull 时,网络请求由 dockerd 守护进程自身发起,因此需要为守护进程配置代理。在 Linux 上,Docker 通常由 systemd 管理,配置方式如下:

  1. 创建 systemd drop-in 配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 写入以下内容(替换为你的代理地址):
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
  1. 重新加载并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 验证是否生效:
sudo systemctl show --property=Environment docker
# 或
docker info | grep -i proxy

⚠️ 注意:如果代理需要认证,特殊字符(如 #@ 等)需要用 %% 进行双转义,例如 http://user:pass%%40word@proxy:8080


Docker CLI 代理(影响 docker builddocker run

通过 ~/.docker/config.json 配置,Docker CLI 会自动将代理环境变量注入到构建和运行的容器中:

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

配置后,docker builddocker run 创建的容器会自动获得 HTTP_PROXYHTTPS_PROXY 等环境变量。


容器运行时代理

方式一:docker run 时通过 -e 传入

docker run -e HTTP_PROXY=http://127.0.0.1:7890 \
           -e HTTPS_PROXY=http://127.0.0.1:7890 \
           -e NO_PROXY=localhost,127.0.0.1 \
           your_image

方式二:Docker Compose 中配置

version: '3'
services:
  app:
    image: your_image
    environment:
      - HTTP_PROXY=http://127.0.0.1:7890
      - HTTPS_PROXY=http://127.0.0.1:7890
      - NO_PROXY=localhost,127.0.0.1

方式三:Dockerfile 中设置(不推荐)

ENV HTTP_PROXY http://proxy.example.com:8080
ENV HTTPS_PROXY http://proxy.example.com:8080

⚠️ 不推荐这种方式,因为代理地址会被固化到镜像中,存在安全风险且缺乏灵活性。


docker build 时的代理

推荐方式:使用 --build-arg 参数

docker build \
  --build-arg HTTP_PROXY=http://127.0.0.1:7890 \
  --build-arg HTTPS_PROXY=http://127.0.0.1:7890 \
  --build-arg NO_PROXY=localhost,127.0.0.1 \
  -t your_image .

替代方式:使用宿主机网络

docker build --network host -t your_image .

这样构建时容器直接使用宿主机的网络栈,无需额外配置代理 IP。


国内镜像加速(替代代理方案)

如果只是 docker pull 拉取镜像慢,可以配置国内镜像加速器,编辑 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io"
  ]
}

然后重启 Docker 服务即可。


📌 总结

场景配置方式
docker pullsystemd 环境变量(/etc/systemd/system/docker.service.d/http-proxy.conf
docker build--build-arg--network host
docker run-e 传入环境变量或 Docker Compose environment
全局自动注入~/.docker/config.json
仅加速镜像拉取/etc/docker/daemon.json 配置 registry-mirrors

💡 重要提醒:守护进程代理和容器运行时代理是相互独立的,配置了守护进程代理并不会自动传递给容器,需要根据实际需求分别配置。