Docker拉取ghcr.io镜像遇tcp connection reset by peer错误求助
解决GHCR镜像拉取时的"connection reset by peer"错误
问题概述
执行sudo docker pull ghcr.io/nokia/srlinux时触发TCP连接重置错误,docker.io等其他容器仓库可正常拉取镜像,排除代理问题。相关错误及排查输出如下:
Docker拉取错误日志
$ sudo docker pull ghcr.io/nokia/srlinux Using default tag: latest Error response from daemon: Get "https://ghrc.io/v2/": read tcp 10.10.213.22:53496->103.224.212.220:443: read: connection reset by peer
Curl测试输出
$ curl -v https://ghcr.io/nokia/srlinux Trying 20.207.73.86:443... Connected to ghcr.io (20.207.73.86) port 443 (#0) ALPN, offering h2 ALPN, offering http/1.1 CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs TLSv1.0 (OUT), TLS header, Certificate Status (22): TLSv1.3 (OUT), TLS handshake, Client hello (1): OpenSSL SSL_connect: Connection reset by peer in connection to ghcr.io:443 Closing connection 0 TLSv1.0 (OUT), TLS header, Unknown (21): TLSv1.3 (OUT), TLS alert, decode error (562): curl: (35) OpenSSL SSL_connect: Connection reset by peer in connection to ghcr.io:443
OpenSSL测试输出
$ openssl s_client -connect ghcr.io:443 CONNECTED(00000003) write:errno=104 no peer certificate available No client certificate CA names sent SSL handshake has read 0 bytes and written 309 bytes Verification: OK New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok)
解决方案
1. 更换GHCR的IP节点访问
GHCR部署在多个IP节点上,部分节点可能被网络拦截:
- 执行
nslookup ghcr.io获取所有可用IP,例如:nslookup ghcr.io Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: ghcr.io canonical name = ghcr.io.github.com. ghcr.io.github.com canonical name = github.map.fastly.net. Name: github.map.fastly.net Address: 20.207.73.86 Name: github.map.fastly.net Address: 20.207.73.119 - 尝试用不同IP测试连接:
curl -v --resolve ghcr.io:443:20.207.73.119 https://ghcr.io/nokia/srlinux - 若某个IP能正常连接,将其添加到
/etc/hosts文件:
之后重新执行echo "20.207.73.119 ghcr.io" | sudo tee -a /etc/hostsdocker pull命令。
2. 强制使用兼容的TLS版本
部分环境默认TLS版本可能不被GHCR支持:
- 尝试指定TLS 1.3连接测试:
curl -v --tlsv1.3 https://ghcr.io/nokia/srlinux - 若测试成功,修改Docker守护进程配置:
创建或编辑/etc/docker/daemon.json:
重启Docker服务:{ "tls-min-version": "TLSv1.2" }
再尝试拉取镜像。sudo systemctl restart docker
3. 检查网络拦截规则
- 临时关闭本地防火墙测试(测试后务必重新开启):
sudo ufw disable - 联系网络管理员确认是否有安全组/防火墙规则拦截了GHCR所属的Azure IP段(如
20.207.73.0/24)。
4. 验证GHCR访问权限
部分公开镜像仍需登录GHCR才能拉取:
sudo docker login ghcr.io
使用GitHub账号完成登录后,再次执行拉取命令。
5. 切换网络环境测试
尝试切换到手机热点或其他网络,排除当前网络的区域性限制问题。
内容的提问来源于stack exchange,提问作者ramasubramanians
相关产品推荐
相关产品推荐

