宝塔面板上一键部署一个项目,卡在拉镜像那步:
Image mysql:8.2 Error Get "https://registry-1.docker.io/v2/": proxyconnect tcp: EOF
Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: EOF
关键词是 proxyconnect tcp: EOF——Docker 通过代理连 Docker Hub 时握手就断了。不是网络挂了,是代理配置有问题。
第一步:看 Docker 是不是走代理
docker info | grep -i proxy
如果看到类似:
HTTP Proxy: http://127.0.0.1:7890
HTTPS Proxy: http://127.0.0.1:7890
说明 Docker daemon 被配了代理。接着验证代理是不是能用:
curl -x http://127.0.0.1:7890 https://registry-1.docker.io/v2/
- 返回
{}或认证提示:代理正常 EOF/timeout:代理进程挂了Connection refused:代理端口没开
三个典型场景
- 系统开了 Clash/v2ray,但 Docker daemon 拿不到——Docker 不会自动继承桌面代理,Mac 上尤其容易踩。
- 代理协议写错——把
http://127.0.0.1:7890写成了https://,直接握手失败。 - 代理软件本身抽风或被墙——重启一下代理再试。
解决办法
方案一:临时不走代理
先确认到底是不是代理的锅:
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
docker pull redis:latest
拉得下来就是代理问题,不用再折腾 Docker 本身了。
方案二:配国内镜像源(推荐)
编辑 daemon 配置:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
写入:
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com"
]
}
重启:
sudo systemctl daemon-reexec
sudo systemctl restart docker
再拉镜像基本就通了。注意公开镜像源可用性经常变化,实在拉不下来就换一个。
方案三:正确给 Docker 配代理
如果确实需要走代理,别改环境变量,改 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://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
然后:
sudo systemctl daemon-reload
sudo systemctl restart docker
一句话总结
proxyconnect tcp: EOF = Docker 正在走一个 坏掉的代理。先 unset 代理确认锅在哪儿,然后要么配国内镜像源,要么正确写 systemd 代理配置。
