CONFIDENTIAL

docker代理

CATEGORY [TECH]
CREATED 2025.12.19
UPDATED 2026.02.17
READ_TIME 4 MIN
TAGS
  1. idea构建默认的是x86架构的docker镜像,如果要在树莓派上使用,需要指定arm架构。并且推荐全都打包成镜像再让树莓派去拿,win的代理远比linux的好设置
  2. 自建docker服务如果需要访问代理最佳是docker host模式(除非多个服务之间需要互相通信)
  3. apt: linux下docker的apt不会走代理,需要独立设置,也就是在 Dockerfile 中配置 apt 代理
  4. 给 Docker Daemon 配全局代理只会影响pull push,不会让容器构建时的apt走代理

也就是说,docker有三种不同的网络环境,需要针对不同的设置不同的代理

Docker 三种代理全总结

代理类型影响范围配置位置推荐使用的代理 IP
1. Docker Daemon 代理docker pull, docker push (拉取/推送镜像)/etc/systemd/system/docker.service.d/proxy.conf127.0.0.1 (因为 Daemon 跑在宿主机上)
2. Docker Build 代理docker build 过程中的 RUN 指令 (如 apt-get, pip install)—build-arg 参数 或 ~/.docker/config.json172.17.0.1 (容器访问宿主机的网桥 IP)
3. 容器运行时代理容器启动后,容器内部的应用网络请求 (docker run)docker run -e 参数 或 ~/.docker/config.json172.17.0.1 (容器访问宿主机的网桥 IP)

详细拆解:

1. Docker Daemon 代理 (拉镜像专用)

这是最常见的痛点:解决 docker pull 慢的问题。

  • 原理:这是给 dockerd 这个后台进程配置的环境变量。

  • 注意:这里配了代理,不会自动让 RUN apt-get 走代理。

  • 配置后需重启:systemctl daemon-reload && systemctl restart docker。

2. Docker Build 代理 (编译环境专用)

解决 Dockerfile 构建过程中下载依赖包慢的问题。

  • 配置方式 A (推荐):执行命令时临时加参数(不污染镜像):
    docker build —build-arg http_proxy=http://172.17.0.1:7890 .

  • 配置方式 B:修改用户目录下的 ~/.docker/config.json(全局对所有 build 生效)。

  • 注意:这些变量只在构建时存在,构建出的镜像运行起来后,这些变量默认是不存在的。

3. 容器运行时代理 (生产环境/业务专用)

解决你运行中的容器(比如一个 Python 程序)去访问墙外 API 的问题。

  • 配置方式 A:启动时注入:
    docker run -e http_proxy=http://172.17.0.1:7890 my_image

  • 配置方式 B:在 docker-compose.yml 的 environment 栏目配置。

  • 配置方式 C:同样可以通过 ~/.docker/config.json 自动注入(只要配了 proxies 字段,docker run 也会生效)。


配 Docker daemon 代理(推荐长期方案)

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

sudo tee /etc/systemd/system/docker.service.d/proxy.conf >/dev/null <<'EOF' [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,::1" EOF`