1

我想从 azure 容器注册表的各个存储库中删除一些不需要的标签/图像。我想以编程方式完成所有这些。例如,我需要的是:

  • 使用 ACR 进行身份验证
  • 列出所有存储库
  • 列出每个存储库的所有标签
  • 删除带有特定标签的不需要的图像。

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

但是我可以用 python 做到这一点吗?是否有类似 Graph API 的东西来执行这些操作?

我为 ACR 找到了这个 API,但只允许删除整个注册表。它不允许特定于存储库的操作: 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 进行身份验证?

4

2 回答 2

1

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

使用管理员用户凭据时,基本身份验证应该可以工作。

于 2019-08-26T20:39:50.930 回答
1

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

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

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

于 2019-08-29T08:49:29.513 回答