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

时间:2019-08-26 09:22:38

标签: python image azure-container-registry docker-cleanup

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

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

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

但是我可以用python吗?有像Graph API这样的东西可以执行这些操作吗?

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

我尝试使用docker Registry 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进行身份验证?

2 个答案:

答案 0 :(得分:0)

此问题的答案提供了一个示例,可帮助您删除:Azure Container Registry - delete all images except 2

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

答案 1 :(得分:0)

要向ACR进行身份验证,您只需将基本身份验证方法与用户名和密码一起使用即可。格式应为:

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

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