删除Azure Container Registry中tag为null的容器镜像
近几年容器技术的蓬勃发展,越来越多的客户开始在Azure中使用AKS,ACR等容器相关的Azure服务,来满足其不断发展的业务使用需求。
但随着时间的推移和业务复杂性的增长,很多客户都会发现,ACR中的某些Repo内,显示的清单计数和实际的清单数量不一致的问题。一般出现这种问题的原因主要有一下几种:
- 上传容器镜像时,没有规范的对容器镜像应用tag标签
- 删除容器镜像时,没有规范的对容器镜像进行删除
其实所谓的清单计数和实际的清单数量不一致,就意味着我们在ACR中,存在某些tag为null的容器镜像,这些tag为null的容器镜像,会计算在ACR的清单计数中,但是我们实际上却无法看到。对于这种类型的容器镜像,我们该如何对其进行删除呢,感兴趣的小伙伴可以参考如下步骤。
首先,我们登录到Azure ACR,可以看到,我们所处的Repo内,清单计数为3,但实际看到的只有一个:
使用CLI进行查看,可以看到,在clock Repo内有两个tags为null的清单:
az acr repository show-manifests --name $acrName --repository $repoName --detail --query '[].{Size:imageSize, Tags:tags}'
对于这两个Tags为null的清单,可以使用如下shell脚本进行删除清理:
#!/bin/sh
acrName="acrnulltest"
repoName="clock"
echo "Remove
null tag image from ${acrName}/${repoName}"
allImages=$(az acr
repository show-manifests -n ${acrName} --repository ${repoName} --query
"[?tags[0]==null].digest" -o tsv)
latestImage=$(az acr
repository show-manifests -n ${acrName} --repository ${repoName} --query
"[?tags[0]==latest].digest" -o tsv)
for id in
do
fullRepo=$repoName@$id
az acr repository delete -n ${acrName} -t ${fullRepo} --yes
done
脚本执行完以后,再次查看clock Repo,可以看到只有一个清单:
同样,在GUI界面下,清单计数也变为了1:
标签:容器,Container,repository,--,tag,Registry,清单,镜像,null From: https://blog.51cto.com/wuyvzhang/9147527