Nexus 存储库:BLOB_UNKNOWN:注册表未知的 blob

问题描述 投票:0回答:1
  • 开发人员定期使用组 docker 存储库。有一天,收到投诉说无法推送图片。
  • 构建容器时,会使用组存储库,其中包括:docker-hosted(local)、hub.docker(proxy)、gcr.io(proxy)、mcr.microsoft.com(proxy)。
  • 推送期间的日志:
2024-01-16 13:27:51,999+0000 ERROR [qtp69617637-29347] user-git org.sonatype.nexus.repository.docker.internal.orient.V2ManifestUtilImpl - Manifest refers to missing layer: sha256:0ec0ce3058439b66991147caf6fd33b737d8f06dec9c07885ecf836cae3d2cdd for: project/name/1.0.37404 in repository RepositoryImpl$$EnhancerByGuice$$698854289{type=hosted, format=docker, name='project-docker-hosted'}
2024-01-16 13:27:52,012+0000 ERROR [qtp69617637-29347] user-git org.sonatype.nexus.repository.docker.internal.orient.V2ManifestUtilImpl - Manifest refers to missing layer: sha256:c78ba7738ca3a1b0a85ee1fab5a5e8dbfcef6fdb5e515d748e168ce7e804a542 for: project/name/1.0.37404 in repository RepositoryImpl$$EnhancerByGuice$$698854289{type=hosted, format=docker, name='project-docker-hosted'}
2024-01-16 13:27:52,015+0000 ERROR [qtp69617637-29347] user-git org.sonatype.nexus.repository.docker.internal.orient.V2ManifestUtilImpl - Manifest refers to missing layer: sha256:7a3506e858bfcef5d2ea86c950664bdc6cf6c5ef6f278abd2d31f3285ea1e5d2 for: project/name/1.0.37404 in repository RepositoryImpl$$EnhancerByGuice$$698854289{type=hosted, format=docker, name='project-docker-hosted'}
2024-01-16 13:27:52,028+0000 WARN  [qtp69617637-29347] user-git org.sonatype.nexus.repository.docker.internal.V2Handlers - Error: PUT /v2/project/name/manifests/1.0.37404: 400 - org.sonatype.nexus.repository.docker.internal.V2Exception: Invalid Manifest

我检查了有问题的斑点。它们确实在 docker 托管的存储库中丢失,但我能够在 mcr.microsoft.com(proxy) 中找到它们。我不明白为什么在推送有问题的 blob 时没有发送到托管存储库......

推送最初由 gitlab-runner 执行。我尝试过手动推送,但没有帮助。我还尝试分别为 docker 托管和 docker-group 存储库重建索引和使缓存无效。我尝试使用任务清理连接。我还尝试下载 nginx:latest 映像,更改标签并将其上传到 docker 托管的存储库。但我收到一个错误:

The push refers to repository [project-docker-hosted/nginx]
009507b85609: Layer already exists 
fbcc9bc44d3e: Layer already exists 
b4ad47845036: Layer already exists 
eddcd06e5ef9: Layer already exists 
b61d4b2cd2da: Layer already exists 
b6c2a8d6f0ac: Layer already exists 
571ade696b26: Layer already exists 
errors:
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
blob unknown: blob unknown to registry
docker blob manifest nexus docker-image
1个回答
0
投票

您提到您正在推送到组存储库。当 docker 将映像推送到注册表时,它会在上传之前检查映像中的每个清单和层是否已存在于远程中。仅当确定远程注册表中不存在每个文件时,它才会推送每个文件。当您将图像推送到组存储库时,它将检查所有组成员是否有传入的清单或层。您的某些图像图层存在于 mcr.microsoft.com 代理存储库中,因此不会上传它们。

如果您想确保所有图像的内容都在托管存储库中,您需要将图像直接推送到该存储库。不要使用组存储库。

© www.soinside.com 2019 - 2024. All rights reserved.