从 Azure 容器注册表中删除旧图像的脚本

Script to delete old images from Azure container registry

我想从 Azure 容器注册表的各个存储库中删除一些不需要的 tags/images。我想以编程方式完成所有这些。比如我需要的是:

通常这些操作可以使用 Azure CLI 和 az acr 命令来完成。也许我可以用 az acr 命令创建一个 PowerShell 脚本来完成这个。

但是我可以用 python 做到这一点吗?有没有像 Graph API 这样的东西来做这些操作?

我发现这个 API 用于 ACR,但只允许删除整个注册表。它不允许特定于存储库的操作: https://docs.microsoft.com/en-us/rest/api/containerregistry/

我尝试使用 docker 注册表 API: https://docs.docker.com/registry/spec/api/

#!/bin/bash

export registry="myregistry.azurecr.io"
export user="myusername"
export password="mypassword"

export operation="/v2/_catalog"

export credentials=$(echo -n "$user:$password" | base64 -w 0)

export catalog=$(curl -s -H "Authorization: Basic $credentials" https://$registry$operation)
echo "Catalog"
echo $catalog

但是一直报错:

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Name":"catalog","Action":"*"}]}]}

如何在使用 Docker 注册表 API 之前正确地使用 ACR 进行身份验证?

这个问题的答案有一个示例可以帮助删除:Azure Container Registry - delete all images except 2

使用管理员用户凭据时,基本身份验证应该有效。

要对 ACR 进行身份验证,您可以使用基本身份验证方法以及用户名和密码。格式应该是这样的:

curl -v -u $user:$passwd https://yourACRName.azurecr.io:443/v2/_catalog

对于用户名和密码,我建议您使用服务主体进行身份验证。您可以按照 Azure Container Registry authentication with service principals. Take a look at the roles for the ACR 中的步骤进行操作。 Contributor 角色是具有足够权限的适当角色,可以列出所有存储库列出每个存储库的所有标签删除带有特定标签的不需要的图像。由于管理员权限,不建议使用管理员凭据。