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

Docker启动应用报ERROR: unknown blob问题求助

解决Docker启动应用时的"ERROR: unknown blob"问题

嘿,我之前也碰到过一模一样的问题,结合你说的——本地registry:2仓库、今早还能正常跑,给你整理几个实用的排查和解决步骤,一步步来:

1. 先确认本地仓库的镜像层是否完好

unknown blob本质就是Docker找不到某个镜像层了,大概率是仓库里的镜像层损坏或者丢了。咱先检查仓库里的镜像状态:

  • 如果你的本地仓库设置了认证,先登录:docker login localhost:5000(没设置的话跳过这步)
  • 列出仓库里的所有镜像:curl http://localhost:5000/v2/_catalog
  • 找到你应用用的那个镜像,查看它的标签:curl http://localhost:5000/v2/[你的镜像名]/tags/list
  • 手动尝试拉取这个镜像:docker pull localhost:5000/[镜像名]:[标签],如果拉取时某个层报错,那基本就是这个层在仓库里坏了

2. 清理本地Docker缓存,重新拉取镜像

本地缓存的镜像层可能也出问题了,先清掉无效资源:

  • 清理所有未使用的镜像、容器、卷(不会影响正在运行的容器):docker system prune -af
  • 删除本地存储的那个有问题的镜像:docker rmi localhost:5000/[镜像名]:[标签]
  • 再重新从本地仓库拉取一次镜像,然后用docker-compose启动试试

3. 检查本地Registry容器的状态和存储

有时候Registry容器挂了或者存储目录损坏也会出这问题:

  • 看看Registry容器是不是在运行:docker ps | grep registry,如果没运行,重启它:docker restart [registry容器ID/名称]
  • 如果启动Registry时挂载了本地存储目录(比如-v /my-registry-data:/var/lib/registry),去这个目录里检查镜像层文件,看看有没有0字节的文件或者缺失的blob目录
  • 要是存储目录确实坏了,如果你有备份的话恢复备份,没有的话可能得重新推送镜像到本地仓库

4. 核对docker-compose配置里的镜像地址

别小看拼写错误,有时候就是这么坑:

  • 打开你的docker-compose.yml,确认镜像地址是localhost:5000/[镜像名]:[标签],没有打错镜像名、标签或者端口
  • 手动拉取配置里的镜像,如果手动拉取都失败,那问题肯定出在镜像或者仓库上,和docker-compose关系不大

5. 重启Docker daemon试试

有时候Docker daemon抽风也会导致镜像层读取异常:

  • 针对systemd系统(比如Ubuntu、CentOS),重启daemon:sudo systemctl restart docker
  • 重启后再用docker-compose up --verbose启动应用,看看报错有没有消失

内容的提问来源于stack exchange,提问作者John Scott Stensland

火山引擎 最新活动