ARTIFACTORY:如何调试'未知blob '时,从本地docker仓库拉
影响版本:
7.倍
描述:
当从本地Artifactory存储库或只包含本地存储库的虚拟库中提取docker映像时,您可能会收到错误' unknown blob ':Docker pull
20.04:从docker-local/library/ubuntu下载
8e5c1b329fe3:拉fs层
下载映像配置错误:download failed after attempts=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”
})
}
我们看到在这个清单中有两个被引用的blobs:
Sha256:8e5c1b329fe39c318c0d49821b339fb94a215c5dc0a2898c8030b5a4d091bcba
Sha256:1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52
我们可以检查日志或UI,通过搜索404来查看哪一层丢失了。2022-04-28T22:36:52.271Z|6895fa07e993d5c6|52.9.243.19|admin|GET|/api/docker/docker /docker/docker-local/v2/library/ubuntu/blobs/sha256:1a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52|404|-1|157| |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 \(达尔文\))
在本例中,缺少的是14a437e363abfa47bfe4b3f5906b7444d12346102d944ebddd537e47a62fc6f52。
解决方法:
解决这个问题最简单的方法是把图层放回这个文件夹。我们可以做一个校验和搜索//www.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进行推广
//www.si-fil.com/confluence/display/JFROG/Docker+Registry#DockerRegistry-PromotingDockerImages
