


























Docker 中的代理配置存在多个作用层级, 不同配置方式影响的范围完全不同。本文基于官方文档,对各层代理机制梳理说明, 以便区分。
配置文件: ~/.docker/config.json, 这个配置主要是针对 docker CLI 以及 docker compose 生效,配置示例如下:
1 | { |
官方文档: https://docs.docker.com/engine/cli/proxy/
在执行:
1 | docker build |
时,CLI 会将 proxy 自动转换为 build-args:
官方说明:
Proxy settings are automatically passed as build arguments.
对应文档: https://docs.docker.com/engine/cli/proxy/#configure-the-docker-client
当执行:
1 | docker run |
CLI 会自动将 proxy 注入为容器环境变量。
官方文档原文:
When you start a container, proxy environment variables are automatically set.
注意:该行为仅发生在使用当前 SHELL 用户执行 Docker CLI 创建容器时。
官方文档:
1 | ARG HTTP_PROXY |
--build-arg 显式传入官方说明:
ARG is not persisted in the final image.
1 | ARG HTTP_PROXY |
docker run -e 覆盖官方说明:
The ENV instruction sets environment variables in the image.
systemd 配置方式, 创建如下文件
1 | /etc/systemd/system/docker.service.d/http-proxy.conf |
内容如下:
1 | [Service] |
更新文件后, 使用 systemctl daemon-reload 重新加载, 并使用 systemctl restart docker 重启生效。
官方文档:https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
文档明确指出:
These environment variables configure the Docker daemon.
即:
仅影响 dockerd 自身网络行为,包括:
不会影响:
| 配置方式 | 影响拉取镜像 | 影响 build | 影响容器环境 |
|---|---|---|---|
| ~/.docker/config.json | ❌ | ✅ | ✅ |
| Dockerfile ARG | ❌ | ✅ | ❌ |
| Dockerfile ENV | ❌ | ✅ | ✅ |
| dockerd systemd proxy | ✅ | ❌ | ❌ |
错误。
ARG 仅存在于构建阶段, 除非显式转换为 ENV。
错误。
官方文档说明:
Proxy settings are used when starting containers.
因此同时影响 docker build 和 docker run命令。
显式传参:
1 | docker build \ |
避免将代理写死在镜像中。
在 compose 文件中显式声明:
1 | environment: |
不要依赖 CLI 自动注入。
仅在宿主机需要代理访问 registry 时启用,比如在你拉镜像遇到网络问题的时候, 除了找镜像源, 你还可以走代理直接下载官方的 registry。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。