Docker Push常见报错及解决方案总结
一、server gave HTTP response to HTTPS client
(一)问题描述

(二)原因分析
执行 docker push 时出现该错误,是因为:
- Docker 默认要求 HTTPS,但目标 registry 仅支持 HTTP(未配置 TLS)。
- 未正确配置
insecure-registries,或配置后未生效(可能需重启 Docker)。
(三)解决方案
1. 配置insecure-registries(推荐测试环境)
修改 Docker 配置文件(/etc/docker/daemon.json 或 Docker Desktop 的 daemon.json):
{
"insecure-registries": ["your.registry.domain:port"]
}
注意: 如果daemon.json文件中已经有其他配置,则追加insecure-registries配置时需要在前一个配置结尾处添加一个英文逗号!!!
是否需要重启?
- Docker Engine < 17.07:必须重启(
sudo systemctl restart docker)。 - Docker Engine ≥ 17.07:通常自动生效,但
建议重启确保生效。 - Docker Desktop:一般自动加载,但网络相关更改可能需要重启。
验证是否生效:
docker info | grep "Insecure Registries"
2. 配置 Registry 使用 HTTPS(推荐生产环境)
- 为 registry 配置有效 SSL 证书(如 Let’s Encrypt 或自签名证书)。
- 确保 Docker 客户端信任该证书。
3. 临时解决方案(不推荐生产)
强制使用 HTTP:
docker --insecure-registry push your.registry.domain:port/image:tag
(四)总结
| 方案 | 适用场景 | 是否需要重启? |
|---|---|---|
insecure-registries | 测试/内网 | 旧版必须重启,新版建议重启 |
| HTTPS 配置 | 生产环境 | 无需(但需证书) |
--insecure-registry | 临时测试 | 无需 |
✅ 最佳实践:
- 测试环境 → 用
insecure-registries,并重启 Docker 确保生效。 - 生产环境 → 必须配置 HTTPS,避免安全风险。
二、connection refused
(一)问题描述

执行curl -XGET http://192.168.XXX.XXX:5000/v2/ catalog命令时会提示拒绝连接

(二)原因分析
当执行 docker push 命令时出现 “connection refused” 错误,通常表示 Docker 客户端无法连接到 registry 服务器。可能的原因包括:
Registry 服务未运行
多数是这个原因导致
- 目标 registry 服务没有启动
- Registry 容器崩溃或停止
- 网络连接问题
- 错误的 registry 地址或端口
- 防火墙/安全组阻止访问
- 网络配置问题(DNS 解析失败等)
- Docker 配置问题
- 未正确配置
insecure-registries(对于 HTTP registry) - Docker 代理设置不正确
- 未正确配置
- 认证问题
- 未登录 registry 或认证失败
- 凭证过期或无效
(三)解决方案
1. 检查 registry 服务状态
# 如果 registry 是本地运行的容器 docker ps | grep registry # 如果没有运行,启动 registry docker run -d -p 5000:5000 --name registry registry:2
2. 验证网络连接
# 测试是否能访问 registry telnet your.registry.domain 5000 # 或 nc -zv your.registry.domain 5000 # 检查 DNS 解析 nslookup your.registry.domain
3. 检查 Docker 配置
# 查看当前 Docker 配置
docker info | grep -A 5 "Insecure Registries"
# 如果需要添加 insecure-registry
# 编辑 /etc/docker/daemon.json
{
"insecure-registries": ["your.registry.domain:5000"]
}
# 然后重启 Docker
sudo systemctl restart docker
4. 检查认证状态
# 查看当前登录状态 cat ~/.docker/config.json # 登录 registry docker login your.registry.domain
5. 检查防火墙设置
# Linux 检查防火墙 sudo iptables -L -n sudo ufw status # 临时开放端口(示例) sudo ufw allow 5000/tcp
(四)常见场景排查
场景1:推送本地 registry 失败
# 错误示例 docker push localhost:5000/my-image # 解决方案 # 1. 确保 registry 容器正在运行 # 2. 确保使用正确的端口 # 3. 对于 localhost registry,确保客户端和 registry 在同一主机
场景2:推送远程 registry 失败
# 错误示例 docker push my.company.com:5000/my-image # 解决方案 # 1. 检查网络连通性 # 2. 确保 registry 地址正确 # 3. 检查是否需要 HTTPS 配置
场景3:认证失败
# 错误示例 Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io: connection refused # 解决方案 # 1. 检查网络连接 # 2. 尝试 docker login # 3. 检查 DNS 设置
(五)高级排查
如果以上方法无效,可以尝试:
- 查看 Docker 详细日志
journalctl -u docker.service -n 50 --no-pager
- 启用 Docker 调试模式
# 编辑 /etc/docker/daemon.json
{
"debug": true
}
sudo systemctl restart docker
- 使用 curl 直接测试 registry API
curl -v http://your.registry.domain:5000/v2/_catalog
(六)总结
| 问题类型 | 检查点 | 解决方案 |
|---|---|---|
| 服务未运行 | docker ps | 启动 registry 容器 |
| 网络问题 | telnet/nc 测试 | 检查防火墙/网络配置 |
| 配置问题 | docker info | 配置 insecure-registries |
| 认证问题 | docker login | 重新登录 registry |
按照以上步骤逐步排查,应该能解决大多数 “connection refused” 问题。如果问题仍然存在,可能需要检查更底层的网络或系统配置。
以上就是Docker Push常见报错及解决方案总结的详细内容,更多关于Docker Push常见报错及解决的资料请关注脚本之家其它相关文章!
相关文章
docker使用dockercompose编排一个Hadoop集群方式
这篇文章主要介绍了docker使用dockercompose编排一个Hadoop集群方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
Docker网络配置(桥接网络和自定义网络)自定义网络设置ip方式
这篇文章主要介绍了Docker网络配置(桥接网络和自定义网络)自定义网络设置ip方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01
docker compose idea CreateProcess error=2 系统找不到指定的文件的问题
这篇文章主要介绍了docker compose idea CreateProcess error=2 系统找不到指定的文件的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08


最新评论