Bootstrap

Error response from daemon: Get “https://registry-1.docker.io/v2/“: proxyconnect tcp: EOF

出现 proxyconnect tcp: EOF 错误,通常意味着 Docker 在尝试通过代理连接到 Docker Hub 时遇到了问题。这个问题表明 Docker 代理设置不正确,或者代理服务器无法正常工作。以下是一些解决方案:

1. 检查 Docker 的代理配置

如果你使用了代理服务器,Docker 需要正确配置代理。首先检查你是否已经为 Docker 配置了代理。可以通过以下步骤来检查并配置代理。

1.1 检查代理配置

查看是否有全局代理配置,运行以下命令查看 Docker 的代理设置:

echo $HTTP_PROXY
echo $HTTPS_PROXY

或者检查 Docker 的代理文件配置:

sudo cat /etc/systemd/system/docker.service.d/http-proxy.conf

如果代理配置存在问题或不正确,请根据需要修改。

1.2 修改或添加代理配置

如果需要修改或添加代理配置,请执行以下步骤。

编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件(如果文件不存在,则创建它):

sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

添加或修改以下内容,将 <proxy_url> 替换为你的代理地址:

[Service]
Environment="HTTP_PROXY=http://<proxy_url>:<port>"
Environment="HTTPS_PROXY=https://<proxy_url>:<port>"

如果你有需要忽略代理的域(例如 Docker Hub),可以添加 NO_PROXY 配置:

Environment="NO_PROXY=localhost,127.0.0.1,.docker.io"
1.3 重启 Docker 服务

修改完成后,运行以下命令以重启 Docker 服务并应用配置:

sudo systemctl daemon-reload
sudo systemctl restart docker

2. 代理服务器问题

如果你的代理服务器不可用或配置有误,也会导致该错误。

  • 检查代理是否正常工作:尝试在浏览器或其他终端上测试代理连接,确保代理服务可用。
  • 禁用代理测试:如果你不需要代理或不确定代理是否导致问题,可以暂时禁用代理。执行以下命令取消 Docker 的代理设置:
unset HTTP_PROXY
unset HTTPS_PROXY

同时编辑 /etc/systemd/system/docker.service.d/http-proxy.conf,删除或注释代理配置:

# Environment="HTTP_PROXY=http://<proxy_url>:<port>"
# Environment="HTTPS_PROXY=https://<proxy_url>:<port>"

保存后,重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后尝试再次拉取镜像:

docker pull redis

3. 直接连接 Docker Hub

如果你不依赖代理,可以完全禁用代理,并确保 Docker 直接连接到 Docker Hub。这可以通过清除代理配置并确保 Docker 使用本地 DNS 解析服务器来实现。

如上述步骤中所示,清除代理配置并确保 Docker 通过 /etc/docker/daemon.json 使用正确的 DNS 服务器:

{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

保存后重启 Docker,再次尝试拉取镜像。

4. 测试 Docker 是否能通过代理访问

如果你必须使用代理,可以通过手动配置 curl 来测试代理是否正常工作:

curl -x http://<proxy_url>:<port> https://registry-1.docker.io/v2/

如果 curl 成功,则代理是正常工作的,你可以继续检查 Docker 的代理设置。否则,你可能需要修复代理服务器本身的问题。

通过上述步骤,应该能够解决代理配置导致的 Docker 镜像拉取问题。

;