纯Docker用得头疼,<none>tag问题刚处理,突然仓库爆了,虽然仓库也是按镜像的layer来存储的,但是自己的源码打出来的层,每次肯定都不一样,那就每次都要占用一份空间了。一般写博客少,大部分网上一搜都有了,都是互相抄的,结果这次实在没找到直接结果,东拼西凑的测试加上偶然的发现,终于搞出了个还算可以的方案,也不完善,不过解决问题为主,所以要记下来。话不多说,进入正题:
1. 先写基础的删除命令(有用户认证的加上[]里的,或者提前做docker login,没有的去掉):
curl [-u username:pwd] -X DELETE http://ip:port/v2/$image/manifests/sha256:$sha
* 提前说明:这个命令只是逻辑删除,硬盘上的内容还在的,后面还要做一下物理删除
网上大部分的找$sha的方案都是通过tag找,这样只能找到最后一个镜像,跟历史的完全没关系,我删了半天删了十几个镜像,才少了几百MB,真的是NMB。后来在做物理清理的时候,发现一个神奇的内容,如图:

同一个image竟然有这么多的manifest,这才是我想删的呀,那接下来就是找到这些所有的manifest了。
2. 有目标就简单了,找到出处就行,这个是仓库里存的路径,我们的仓库也是运行在docker里的,仓库里的镜像存储位置挂载出来,直接ls出来就行了,例如,挂载的路径是/home/user/registry,就
ls /home/user/registry/docker/registry/v2/repositories/$image/_manifests/revisions/sha

本文介绍了如何清理Docker Registry中的历史垃圾数据,包括逻辑删除manifest和物理删除镜像,以释放硬盘空间。首先,通过特定命令逻辑删除manifest,然后在容器中执行物理删除操作,最后手动清理遗留目录。

9336

被折叠的 条评论
为什么被折叠?



