向本地5000端口Registry推送Docker镜像超时失败,该如何排查解决?
排查解决步骤
- 验证Registry服务本身可用性
进入容器内部测试服务是否正常响应:
docker exec -it local-registry curl http://127.0.0.1:5000/v2/_catalog
- 若容器内部能正常返回空的镜像列表结果,说明Registry服务运行正常,问题出在宿主机到容器的网络链路;
- 若容器内部也无响应,直接排查Registry配置与存储后端问题。
- 排查宿主机网络拦截规则
- 确认5000端口由Docker代理正常监听:
ss -tunlp | grep 5000
- 临时关闭防火墙与SELinux测试,排除规则拦截:
# 临时关闭firewalld systemctl stop firewalld # 临时关闭SELinux setenforce 0
调整后重试curl http://localhost:5000和镜像推送操作。
- 排查存储与缓存组件异常
从日志可见你使用了Redis缓存和文件系统存储:
- 若你挂载了宿主机目录作为Registry存储,检查目录权限,Registry默认运行UID为1000,需确保存储目录对该UID开放读写权限:
# 替换为你实际挂载的Registry存储路径 chown -R 1000:1000 /opt/registry/data
- 测试Registry到Redis服务的连通性,Redis连接超时会直接导致Registry请求hang住,核对Registry配置文件中的Redis地址、端口、密码配置是否正确,可进入容器手动连接Redis验证。
- 修正Docker客户端配置
- 检查
/etc/docker/daemon.json是否已配置非安全仓库白名单:
{ "insecure-registries": ["localhost:5000"] }
修改完成后执行systemctl restart docker重启Docker服务生效。
- 若你配置了Docker全局代理,需将
localhost,127.0.0.1加入NO_PROXY环境变量,避免本地请求被代理转发导致超时。
- 替换镜像版本验证
你当前使用的ibmcom/registry:2.6.2.5属于定制旧版本,存在已知的兼容性BUG,可替换为官方registry:2.8镜像启动测试,排除镜像本身缺陷。
内容的提问来源于stack exchange,提问作者AmulyaM
相关产品推荐
相关产品推荐

