代理环境下配置Docker客户端后仍无法拉取镜像如何解决?
Docker代理环境下拉取镜像失败的解决建议
首先核心误区说明:你配置的~/.docker/config.json属于Docker客户端代理,仅作用于docker命令本身的请求、以及运行容器时注入到容器内部的默认代理,不控制Docker守护进程(dockerd)拉取镜像的网络请求,这是绝大多数配置后不生效的原因。
正确配置Docker守护进程代理步骤
- 第一步:创建systemd drop-in配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
- 第二步:新建代理配置文件
/etc/systemd/system/docker.service.d/http-proxy.conf,写入如下内容:
[Service] Environment="HTTP_PROXY=http://替换为你的代理地址:端口" Environment="HTTPS_PROXY=http://替换为你的代理地址:端口" # 配置不需要走代理的地址,可根据实际需求调整 Environment="NO_PROXY=localhost,127.0.0.1,私有镜像仓库地址"
- 第三步:重载systemd配置并重启Docker
sudo systemctl daemon-reload sudo systemctl restart docker
- 第四步:验证配置是否生效
sudo systemctl show --property=Environment docker
如果输出内容中包含你配置的代理环境变量,说明守护进程代理配置成功。
其他排查点
- 检查代理地址格式是否正确:必须携带协议头(http/https/socks5)和端口,需要身份认证的代理要将用户名密码拼接在地址内,格式为
http://用户名:密码@代理地址:端口 - 验证sudo环境的环境变量是否生效:你配置的
$DOCKER_CONFIG默认不会被sudo继承,可执行sudo echo $DOCKER_CONFIG确认是否有输出,无输出的话需要在sudoers配置中保留该变量,或者直接给root用户的/root/.docker/config.json也配置相同的代理规则 - 检查
NO_PROXY规则是否误包含了你要拉取的镜像仓库地址,若存在需要移除对应规则 - 如果使用socks5代理,确认当前Docker版本支持socks5协议,低于18.09的旧版本需要额外升级适配
内容的提问来源于stack exchange,提问作者emilie zawadzki
相关产品推荐
相关产品推荐

