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

Docker私有仓库推送镜像无限重试,报blob unknown错误求助

解决Docker私有仓库推送镜像时的"blob unknown"与无限重试问题

我之前也踩过这个坑,咱们一步步来排查解决:

1. 先确认镜像标签是否正确

  • 执行docker images查看本地镜像列表,确认你要推送的registry.domain/hellow-world:latest确实存在,有没有拼写错误(比如你写的hellow-world是不是多打了个l?应该是hello-world?)
  • 如果标签有误,重新给本地镜像打标签:docker tag [本地镜像ID] registry.domain/hello-world:latest,把括号里的内容替换成你实际的镜像ID和正确的仓库地址

2. 检查私有仓库的存储配置(最常见原因

这种blob unknown错误大多是仓库的存储后端出了问题,比如文件权限不对或者存储路径配置错误:

  • 如果你的私有仓库容器挂载了本地存储卷(比如/data/registry),先检查宿主机上这个目录的权限,执行chown -R 1000:1000 /data/registry——因为registry容器默认用uid/gid为1000的用户运行,权限不对会导致无法写入blob文件
  • 如果用了S3之类的第三方存储后端,检查存储服务的连接配置、密钥权限,确保仓库能正常读写存储里的文件

3. 清理缓存并重启服务

  • 先清理本地Docker的无效镜像和缓存:docker system prune -a,清理完后重新尝试推送
  • 重启私有仓库容器:docker restart [你的registry容器名/ID],让仓库重新加载存储配置

4. 检查Docker daemon对私有仓库的信任配置

如果你的私有仓库是HTTP协议的,Docker默认会拒绝推送,需要添加信任:

  • 在Linux系统中,编辑/etc/docker/daemon.json文件,添加以下内容:
    {
      "insecure-registries": ["registry.domain"]
    }
    
    然后重启Docker服务:systemctl restart docker
  • Windows/macOS用户可以打开Docker桌面端的设置,在"Docker Engine"里添加同样的配置,或者在"Registry"选项中添加不安全仓库地址

5. 查看完整日志排查细节

你给出的日志是截断的,建议执行docker logs -f [你的registry容器名]查看完整的错误信息,比如有没有存储路径不存在、权限拒绝等更具体的提示,能帮你更快定位问题

6. 极端情况:重新创建仓库容器

如果以上方法都没解决,先备份好仓库的存储数据(就是你挂载的本地目录),然后删除旧容器重新创建:

docker stop registry
docker rm registry
docker run -d -p 5000:5000 --restart=always -v /data/registry:/var/lib/registry --name registry registry:latest

记得替换成你自己的端口和存储路径

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

火山引擎 最新活动