proxyconnect tcp: EOF 这个错误不是 Docker Hub 故障,而是 Docker daemon 正在使用一个不可达的代理。
快速诊断
# 查看 Docker 是否配置了代理
docker info | grep -i proxy
# 查看环境变量
env | grep -i proxy
如果看到:
HTTP Proxy: http://127.0.0.1:7890
说明 Docker 正在走代理,需要验证代理是否可用:
curl -x http://127.0.0.1:7890 https://registry-1.docker.io/v2/
- 返回
{}或认证信息 → 代理正常 - EOF / timeout → 代理链路断了
- Connection refused → 代理未启动
方案一:清除代理环境变量(临时)
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
docker pull redis:latest
如果此时能拉成功,说明就是代理问题。
方案二:配置国内镜像源(推荐)
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
写入:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com"
]
}
然后重启:
sudo systemctl daemon-reexec
sudo systemctl restart docker
验证:
docker info | grep -A5 "Registry Mirrors"
方案三:正确配置 Docker daemon 使用代理
Docker 不会自动读取系统代理(即使浏览器能上网),需要单独配置:
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://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
注意:代理地址必须用 http://,不能写 https://:
HTTPS_PROXY=https://127.0.0.1:7890 ← 错误
HTTPS_PROXY=http://127.0.0.1:7890 ← 正确
重新加载:
sudo systemctl daemon-reload
sudo systemctl restart docker
常见坑
Docker 不继承系统代理:Clash/sing-box 开了,Docker 仍然无法自动使用,必须显式配置 /etc/systemd/system/docker.service.d/http-proxy.conf。
proxyconnect tcp: EOF 和 connection refused 的区别:
- EOF → 代理在监听但链路断了(软件崩溃、配置错误)
- refused → 代理根本没有在对应端口监听
