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
▍注意事项 ⚠️
- 认证代理
若代理需账号密码,URL 格式为
http://user:password@proxy:port
(注意特殊字符转义) - NO_PROXY 配置
内网地址需加入白名单,避免流量绕行代理(如
192.168.0.0/16
) - Daemon 与容器代理的区别 Daemon 代理影响镜像拉取,容器代理影响运行时网络
若需 企业级代理管理(如 PAC 自动配置),建议结合透明代理工具(如 squid
或 cntlm
)。