如何在 ECR 上下载或标记未标记的图像?

How to download or tag an untagged image on ECR?

ECR 上的 UI 不允许您将标签应用于图像。当您将图像推送到具有已存在标签的 ECR 时,现有图像将按预期变为未标记。但是,似乎没有办法下载未标记的图像。例如,我不能简单地下载图像哈希

docker pull myarn.amazonaws.com/sandbox:e226e9aaa12beb32bfe65c571cb60605b2de13338866bc832bba0e39f6819365
Error response from daemon: manifest for myarn.amazonaws.com/sandbox:e226e9aaa12beb32bfe65c571cb60605b2de13338866bc832bba0e39f6819365 not found

所以我发现了一种对用户不友好的方法。您首先标记一个未标记的图像,然后您可以下载它。在这里我将未标记的图像标记为 backup

MANIFEST=$(aws ecr batch-get-image --repository-name sandbox --image-ids imageDigest=sha256:e226e9aaa12beb32bfe65c571cb60605b2de13338866bc832bba0e39f6819365 --query 'images[].imageManifest' --output text)
aws ecr put-image --repository-name sandbox --image-tag backup --image-manifest "$MANIFEST"

那我就可以正常下载了

docker pull myarn.amazonaws.com/sandbox:backup

您必须使用 AWS 最近在其 UI 上建议的另一种表示法(当时可能不可用):

docker pull myarn.amazonaws.com/sandbox@sha256:e226e9aaa12beb32bfe65c571cb60605b2de13338866bc832bba0e39f6819365

至少它确实适用于我未标记的图像。

假设 ECR 存储库 arn 为 1283761230897.dkr.ecr.us-east-1.amazonaws.com/my-repository:

要提取未标记的 docker 图像,请使用可以从 ECR 存储库复制的 sha 用于未标记的图像(感谢 @Győző Papp 的回答),例如:

docker pull 1283761230897.dkr.ecr.us-east-1.amazonaws.com/my-repository@sha256:bee1809b6ab2918yfdjsajhf21398f41cfc2dcc69d27253

要在拉取后重新标记它,请使用 docker 标记和您想要的任何标记,下面的示例使用标记 my-new-tag:

标记它
docker tag 1283761230897.dkr.ecr.us-east-1.amazonaws.com/my-repository@sha256:bee1809b6ab2918yfdjsajhf21398f41cfc2dcc69d27253 1283761230897.dkr.ecr.us-east-1.amazonaws.com/my-repository:my-new-tag

然后将标记的版本推送回 AWS ECR:

docker push 1283761230897.dkr.ecr.us-east-1.amazonaws.com/my-repository:my-new-tag

不过您需要先 log in to ECR locally first 使用 get-login...