从图像中删除标签

Remove tag from image

我有一个带有 2 个标签的图像(在 AWS ECR 中),我只想删除一个标签。

我可以使用以下方法轻松地从我的本地环境中删除: docker rmi <REPOSITORY>:<TAG>

我想将其从 ECR 中删除。任何帮助将不胜感激。

您可以使用以下命令删除标签:

aws ecr batch-delete-image --repository-name <REPO NAME> --image-ids imageTag=<TAG NAME>

我你只有一个标签,执行这个命令然后它会删除图像。如果同一张图片有多个标签,请指定一个,并且只删除该标签。

如果需要删除更多标签,这里是已接受答案的扩展:

ECR_REPO="my-repo-name"

# Create a file with the list of AWS ECR tags, with one tag per line
aws ecr list-images --repository-name $ECR_REPO --filter "tagStatus=TAGGED" \
    --query "imageIds[*]" --output text \
    | cut -f2 > ecr-image-tags-${ECR_REPO}.txt

# For each tag, delete the image on AWS ECR
cat ecr-image-tags-${ECR_REPO}.txt | xargs -I {} \
    aws ecr batch-delete-image --repository-name ${ECR_REPO} --image-ids imageTag={} | cat

如果您想有选择地删除带有特定图案的标记图像,您也可以在最后一行将 cat 替换为 grep -E PATTERN

我们可以改进 的批量解决方案,方法是每次调用 `aws ecr batch-delete-image

使用多个 --image-ids

假设文件 ecr-image-tags-${ECR_REPO}.txt 每行包含 1 个要删除的标签(根据其他答案。)不要忘记从文件中删除要保留的标签!

BATCH_SIZE=20  # set max number of tags per batch-delete-image call
< ecr-image-tags-${ECR_REPO}.txt sed -e 's/^/imageTag=/' | \
    xargs -n $BATCH_SIZE \
    aws ecr batch-delete-image --image-ids

删除 -n $BATCH_SIZE 会将所有标签放在对 batch-delete-image 的一次调用中。