Docker通过cntlm代理拉取镜像遇connection reset by peer错误求助
Docker拉取镜像时
proxyconnect tcp连接重置问题排查方案 1. 先验证网络基础连通性
- 在Docker主机上ping cntlm网关的IP,确认两台虚拟机网络互通
- 用
telnet <cntlm-ip> 3128或nc -zv <cntlm-ip> 3128测试3128端口是否开放,连不通先解决防火墙、路由规则这类网络层面问题
2. 检查cntlm网关的可用性
- 确认cntlm服务正常运行:
systemctl status cntlm,异常则重启服务并查看日志cat /var/log/cntlm.log - 在cntlm主机本地测试代理连通性:
curl -x http://localhost:3128 https://registry-1.docker.io/v2/,返回401 Unauthorized即说明代理能正常转发请求(401是镜像仓库的正常认证提示) - 核对cntlm配置文件(通常是
/etc/cntlm.conf),确保上游代理(如果有)、认证信息(用户名/密码/NTLM哈希)配置正确
3. 校验Docker守护进程代理配置
- 检查
/etc/docker/daemon.json的配置格式是否正确,注意HTTPS代理指向的是cntlm的HTTP地址:{ "proxies": { "default": { "httpProxy": "http://<cntlm-ip>:3128", "httpsProxy": "http://<cntlm-ip>:3128", "noProxy": "localhost,127.0.0.1,你的内网网段" } } } - 重启Docker服务生效:
systemctl restart docker,并用systemctl status docker确认服务正常启动 - 查看Docker日志排查代理加载问题:
journalctl -u docker.service
4. 排查防火墙与SELinux限制
- 在cntlm主机开放3128端口:
firewall-cmd --add-port=3128/tcp --permanent && firewall-cmd --reload - 在Docker主机确认出站规则允许访问cntlm的3128端口
- 临时关闭SELinux测试:
setenforce 0,若问题解决需配置SELinux规则允许Docker通过代理连接
5. 直接在Docker主机测试代理
执行curl -x http://<cntlm-ip>:3128 https://registry-1.docker.io/v2/,如果返回401则代理正常,问题出在Docker配置;若仍出现连接重置,继续排查cntlm或网络链路
内容的提问来源于stack exchange,提问作者Dion
相关产品推荐
相关产品推荐

