CONFIDENTIAL
docker代理
- idea构建默认的是x86架构的docker镜像,如果要在树莓派上使用,需要指定arm架构。并且推荐全都打包成镜像再让树莓派去拿,win的代理远比linux的好设置
- 自建docker服务如果需要访问代理最佳是docker host模式(除非多个服务之间需要互相通信)
- apt: linux下docker的apt不会走代理,需要独立设置,也就是在 Dockerfile 中配置 apt 代理
- 给 Docker Daemon 配全局代理只会影响pull push,不会让容器构建时的apt走代理
也就是说,docker有三种不同的网络环境,需要针对不同的设置不同的代理
Docker 三种代理全总结
| 代理类型 | 影响范围 | 配置位置 | 推荐使用的代理 IP |
| 1. Docker Daemon 代理 | docker pull, docker push (拉取/推送镜像) | /etc/systemd/system/docker.service.d/proxy.conf | 127.0.0.1 (因为 Daemon 跑在宿主机上) |
| 2. Docker Build 代理 | docker build 过程中的 RUN 指令 (如 apt-get, pip install) | —build-arg 参数 或 ~/.docker/config.json | 172.17.0.1 (容器访问宿主机的网桥 IP) |
| 3. 容器运行时代理 | 容器启动后,容器内部的应用网络请求 (docker run) | docker run -e 参数 或 ~/.docker/config.json | 172.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`