az acr repository delete 和 untag 命令有什么区别?

What is the difference between az acr repository delete and untag commands?

我正在尝试编写一个脚本来清理 Azure 容器注册表。我为此使用的命令是:

# Remove images with unwanted tags
az acr repository delete --name $registryName --image $imageName --yes

# Remove dangling images
az acr repository show-manifests --name $AzureRegistryName --repository $RepositoryName --query "[?tags[0]==null].digest" -o tsv `
   | %{ az acr repository delete --name $AzureRegistryName --image $RepositoryName@$_ --yes }

imagename 指的是 repository:unwantedtag 的组合。

如上所述,我正在使用 az acr repository delete 命令。这将删除 imagename 引用的清单以及引用同一清单的所有其他标签。

如果我的同一张图片有两个不同的标签,即 test:100test:101,那么两者将有相同的清单。出于清理目的,我只想保留其中一个。如果我删除一张图片 test:100,那么删除清单也会删除 test:101。这是不可取的。

另一件事是,如果我想在清理期间同时删除两个标签,在先删除 test:100 之后,当我尝试删除 test:101 时,它会 return 一个错误:

az : ERROR: Error: manifest unknown. 

即使它不会阻止脚本进一步执行,这个错误也很烦人。两个标签也被删除。

所以基本上,我需要的是这个问题的解决方案。 使用 az acr repository untag 命令而不是 delete 可以解决这个问题吗?如果我用不需要的标签取消标记图像,然后 运行 一个删除悬空清单的命令怎么办?

从这个角度看,deleteuntag 命令有何不同?

az acr repository delete 命令按标签删除图像。图像独有的所有图层以及与图像关联的任何其他标签都将被删除。

az acr repository untag命令删除标签。当您取消标记图像时,没有 space 被释放,因为它的清单和图层数据保留在注册表中。仅删除标记引用本身。

我需要的实际方法是先取消图像标签,然后删除悬挂的清单。