如何调试'未知blob '时,从本地docker存储库
影响版本:
7.倍
描述:
当从本地Artifactory存储库或只包含本地存储库的虚拟存储库中提取docker映像时,您可能会得到错误' unknown blob ':Docker pull
20.04:从docker-local/library/ubuntu中抽取
8e5c1b329fe3:拉fs层
拉映像配置错误:尝试下载失败=1:未知blob
通常,这个错误意味着docker manifest。Json引用了本地存储库中不存在的层。我们可以看看货物清单。Json(不是列表):{
“schemaVersion”:2
“mediaType”:“application / json vnd.docker.distribution.manifest.v2 +”,
"配置":{
“mediaType”:“application / json vnd.docker.container.image.v1 +”,
“大小”:1463年,
“消化”:“sha256:1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52”
},
“层”:[{
“mediaType”:“应用程序/ vnd.docker.image.rootfs.diff.tar.gzip”,
“大小”:28565998,
“消化”:“sha256:8e5c1b329fe39c318c0d49821b339fb94a215c5dc0a2898c8030b5a4d091bcba”
})
}
我们看到在这个清单中有两个引用的blob:
Sha256:8e5c1b329fe39c318c0d49821b339fb94a215c5dc0a2898c8030b5a4d091bcba
Sha256:1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52
我们可以检查日志或UI,通过在拉图像时搜索404来查看哪个层丢失了:2022-04-28T22:36:52.271Z|6895fa07e993d5c6|52.9.243.19|admin|GET|/api/docker/docker-local/v2/library/ubuntu/blobs/sha256:1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52|404|-1|157|5|docker/20.10.14 go/go1.16.15 git-commit/87a90dc kernel/5.10.104-linuxkit os/linux arch/amd64 UpstreamClient(docker- client /20.10.14 \(darwin\))
在本例中,缺失的是1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52。
解决方法:
修复这个问题最简单的方法是将图层放回这个文件夹。我们可以进行校验和搜索//m.si-fil.com/confluence/display/JFROG/Artifactory+REST+API#ArtifactoryRESTAPI-ChecksumSearch
1 a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52
然后,如果找到了,我们可以将它复制到它应该在的地方-其他层存在的文件夹。在我的例子中,它应该在docker-local/library/ubuntu/sha256__7b3e30下,注意这不是' 20.04 '文件夹。注意,文件名应该是docker层格式(sha256__
如果它在您的Artifactory中不存在,那么该映像将不得不从另一个源重新推入Artifactory。如果它是一个公共映像,那么只需通过远程存储库重新缓存它,然后将其复制到本地即可。否则,您将需要定位映像的私有源并将其推回Artifactory。
一些原因:
根据上次下载的时间戳清理脚本会导致这种情况发生;在docker存储库上使用这类脚本是不可取的,除非它清理的是整个映像而不是某些层。
促销:
请务必使用docker特定的推广api进行推广
//m.si-fil.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-PromotingDockerImages
