Docker注册表 - 从文件系统中删除清单

时间:2017-07-14 13:46:51

标签: docker docker-registry

我的CI将图像推送到一个标记下的docker注册表。我有一个脚本定期清理旧的unuser图像。它只是迭代标记内的摘要,并在注册表API上调用DELETE(迭代注册表文件系统上的文件)。

dir="${REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY}/docker/registry/v2/repositories/test/_manifests/tags/5.3/index/sha256/"
oldManifests=$(ls -t $dir | tail -n +2 ; done)
for hash in $oldManifests
do
    curl  -L -X DELETE http://localhost:5000/v2/test/manifests/sha256:$hash
done

/bin/registry garbage-collect /etc/docker/registry/config.yml

垃圾收集后,所有blob都被删除,但是_manifests / tags / 5.3 / index / sha256 /下没有目录。为什么?手动删除它们是否安全?

1 个答案:

答案 0 :(得分:0)

是的,手动删除它们是安全的。

在你的情况下,标签是版本化的,使用ls -t并没有什么坏处。对于“最新”代码,最好检查.../_manifests/tags/5.3/current/link的内容(已剥离sha256:前缀)并继续,因为您可以将旧版清单推送为新的“最新”降级先前推送的图像。

我有一个脚本从注册表中清除未标记的(您的案例)或标记的图像: https://github.com/ricardobranco777/clean_registry.sh

我不使用API​​,因为它缺乏删除标签的支持。