docker pull拉取国外镜像通过代理

1.问题定位思路

docker 确实支持通过 HTTP(S) proxy 拉镜像,但它不读取你当前 shell 的 http_proxy 环境变量(除非你用 systemd override)。
最常见的“不生效”场景是:你的终端里 export http_proxy=xxx 生效了,但 Docker 守护进程 dockerd 没有使用这些代理变量

1.1.根因

Docker CLI(docker 命令)不是直接拉镜像的,实际拉镜像的是 dockerd 守护进程
如果 dockerd 没配置代理,它就不会走代理,而是直接访问外网 → 导致拉取失败或无代理流量。

2.docker pull 通过 HTTP/HTTPS 代理的正确配置方式(systemd)

2.1.为 Docker 守护进程配置代理

创建或编辑:

/etc/systemd/system/docker.service.d/http-proxy.conf
or
/usr/lib/systemd/system/docker.service  # 推荐修改这个

内容为:

[Service]
Environment="HTTP_PROXY=http://your-proxy:port/"
Environment="HTTPS_PROXY=http://your-proxy:port/"
Environment="NO_PROXY=localhost,127.0.0.1,*.yourdomain"

然后刷新 systemd 配置并重启 docker:

systemctl daemon-reload
systemctl restart docker

2.2.验证代理是否生效

docker info

滚到最底部会显示:

HTTP Proxy: http://...
HTTPS Proxy: http://...

d046929ce078a2b056d42b50ddb3a528.png