Aws ecr LayersNotFoundException 但层实际上存在于注册表中

问题描述 投票:0回答:1

我正在尝试将图像从一个存储库重新标记并复制到同一存储库中的另一个存储库,而不使用 Docker,而仅使用 aws cli
我首先获得要复制的图像的清单(步骤 1),毫无例外地得到了这个,但是当我尝试将其

put
到新存储库(步骤 2)时,aws 告诉我图层不存在,我觉得很奇怪,因为如果我在步骤 1 中从清单中获取图层,则意味着它们在那里,这些是我正在运行的命令:
第1步:

MANIFEST=$(aws ecr batch-get-image --repository-name REPO_NAME --image-ids imageTag=THE_CURRENT_IMMAGE_TAG --profile MY_PROFILE --output json | jq --raw-output '.images[].imageManifest')

第2步:

aws ecr put-image --repository-name NEW_REPOSITORY_NAME --image-tag NEW_IMAGE_TAG --image-manifest "$MANIFEST" --profile MY_PROFILE

返回:

An error occurred (LayersNotFoundException) when calling the PutImage operation: Layers with digests '[sha256....]'required for pushing image into repository with name 'NEW_REPOSITORY_NAME ' in the registry with id 'MY_REGISTRY' do not exist

我不知道我在这里做错了什么,不幸的是我在网上找不到任何与我类似的例子,有什么想法吗?

aws-cli amazon-ecr
1个回答
0
投票

我自己也遇到过类似的问题。看来 ECR PutImage 操作不便于在存储库之间直接传输图像。这种限制可能源于 ECR 用于存储图像层的底层架构。

根据我的理解,当您调用 PutImage 命令时,它不会执行所有图像层的完整复制。相反,它假设存储库中已经提供了必要的层。因此,尝试使用此命令在存储库之间传输图像可能不会产生预期的结果。

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