You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker拉取镜像失败报connection reset by peer错误求助(代理环境)

解决Docker在代理环境下拉取镜像失败(连接重置)的问题

我来帮你搞定这个问题!从你给出的报错和描述来看,虽然系统层面ping google.com正常,但Docker本身不会自动继承系统的代理配置,这才导致拉取镜像时出现TCP连接重置的错误。下面是一步步的解决方案:

1. 为Docker配置专属代理

Docker有自己的代理配置体系,需要单独设置:

  • 首先创建Docker服务的配置目录:
    mkdir -p /etc/systemd/system/docker.service.d
    
  • 新建代理配置文件http-proxy.conf
    vi /etc/systemd/system/docker.service.d/http-proxy.conf
    
    写入以下内容(记得替换成你实际的代理地址和端口):
    [Service]
    Environment="HTTP_PROXY=http://你的代理IP:代理端口/"
    Environment="HTTPS_PROXY=http://你的代理IP:代理端口/"
    Environment="NO_PROXY=localhost,127.0.0.1,本地私有仓库地址(如果有)"
    
  • 重新加载systemd配置并重启Docker:
    systemctl daemon-reload
    systemctl restart docker
    
  • 验证代理是否生效:执行docker info,在输出里找到HTTP ProxyHTTPS Proxy,确认显示的是你配置的代理地址。

2. 处理代理的SSL证书问题(如果是企业自签名证书)

如果你的公司代理使用的是自签名SSL证书,Docker会拒绝信任这个证书,导致HTTPS连接失败:

  • 创建Docker的证书目录:
    mkdir -p /etc/docker/certs.d/docker.io
    
  • 将代理的CA证书文件复制到这个目录,并重命名为ca.crt
    cp /path/to/your/proxy-ca.crt /etc/docker/certs.d/docker.io/ca.crt
    
  • 重启Docker服务:
    systemctl restart docker
    

3. 用Docker容器测试连通性(更准确的验证)

ping只是验证ICMP连通性,而Docker拉取镜像用的是HTTPS(TCP 443),可以用这个命令测试容器内能否正常访问Docker Hub:

docker run --rm alpine wget -O- https://index.docker.io

如果能返回正常的HTML内容,说明代理配置已经生效。

4. 排查防火墙/SELinux的干扰

有时候系统的防火墙或SELinux会阻止Docker的出站连接:

  • 临时关闭SELinux测试:
    setenforce 0
    
    之后再尝试拉取镜像,如果成功,就需要配置SELinux规则允许Docker通过代理连接(可以用semanage命令添加相关规则)。
  • 检查防火墙规则,确保允许Docker访问代理的端口,以及出站的443端口。

按照这些步骤操作后,应该就能解决你遇到的连接重置问题了。核心就是让Docker正确使用代理,而不是只依赖系统层面的网络设置。

内容的提问来源于stack exchange,提问作者Malavika

火山引擎 最新活动