从 Azure 容器注册表中删除旧图像的脚本
Script to delete old images from Azure container registry
我想从 Azure 容器注册表的各个存储库中删除一些不需要的 tags/images。我想以编程方式完成所有这些。比如我需要的是:
- 使用 ACR 进行身份验证
- 列出所有存储库
- 列出每个存储库的所有标签
- 删除带有特定标签的不需要的图像。
通常这些操作可以使用 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
角色是具有足够权限的适当角色,可以列出所有存储库、列出每个存储库的所有标签 和删除带有特定标签的不需要的图像。由于管理员权限,不建议使用管理员凭据。
我想从 Azure 容器注册表的各个存储库中删除一些不需要的 tags/images。我想以编程方式完成所有这些。比如我需要的是:
- 使用 ACR 进行身份验证
- 列出所有存储库
- 列出每个存储库的所有标签
- 删除带有特定标签的不需要的图像。
通常这些操作可以使用 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
角色是具有足够权限的适当角色,可以列出所有存储库、列出每个存储库的所有标签 和删除带有特定标签的不需要的图像。由于管理员权限,不建议使用管理员凭据。