执行docker pull时随机出现manifest unknown报错问题咨询
触发原因
- Quay容器镜像仓库的CDN边缘节点同步延迟:不同地域的节点对镜像tag对应的manifest同步进度不一致,请求被路由到未完成同步的节点时就会返回找不到manifest,路由到已同步的节点则拉取正常,表现为随机报错。
- 镜像标签被重复覆盖:该
d61d0626标签被维护方重新推送了新的镜像内容,旧的manifest已被删除,新的manifest还在仓库各节点同步过程中,同步窗口期内拉取就会随机出现报错。 - 本地Docker客户端manifest缓存冲突:本地缓存了该标签对应的旧manifest文件,和远程仓库当前的manifest校验不匹配,也会偶发触发该报错。
- 网络代理缓存过期:如果拉取时使用了网络代理,代理节点缓存了该标签的过期manifest,也会导致随机返回不存在的错误。
解决方法
- 优先使用镜像digest代替标签拉取:digest是镜像内容的唯一哈希标识,不会随标签更新而变化。如果之前成功拉取过该镜像,可执行命令
docker inspect quay.io/openware/baseapp:d61d0626 | grep Digest获取对应的哈希值,之后拉取时使用quay.io/openware/baseapp@sha256:你的哈希值格式,docker-compose配置文件中也把image字段修改为该格式即可彻底避免该问题。 - 清理本地manifest缓存后重试:执行命令
docker system prune --filter="type=manifest"清理本地无效的manifest缓存,不会删除已下载的本地镜像,清理后再执行拉取操作即可。 - 多次重试或等待同步完成:如果是仓库节点同步延迟导致的问题,可多次执行拉取命令直到请求路由到已同步的节点,也可以等待1-2小时待仓库所有节点同步完成后再操作。
- 避免重复覆盖镜像标签:如果是你自己维护的该镜像,后续推送时不要覆盖已存在的标签,更新镜像就使用新的标签,从根源避免同步不一致的问题。
内容的提问来源于stack exchange,提问作者Ghazal Nickpour
相关产品推荐
相关产品推荐

