docker system prune 到底会删什么?container / image / volume / network 各自的 prune 有什么规则,哪些要加 -a?怎么确保不误删别人的东西?这篇在一个有很多其它数据的 Docker 里,全程用标签过滤,逐个验证。
现有:exited、running、created 各一个(都带 bwlab 标签) docker container prune -f --filter label=bwlab=1 输出:Deleted Containers: | 8541f591a9dc61367cd4c4db638795a7a30d4c13c23668c222c6270a39650fc7 | 688a1a406683a7a0318c9d5f9daba7e6bb8c39856591f1ede605b0d43c9ecf07 | | Total reclaimed space: 8.192kB 剩下的 bwlab 容器:['bwlab-c75-running Up Less than a second']
这台 Docker 里有别的项目的容器、卷、镜像,所以我给自己创建的每个对象打了标签 bwlab=1,每次 prune 都带 --filter label=bwlab=1。不带过滤的 prune 会清理所有符合条件的对象,在共用的机器上先想清楚再运行。
现有:bwlab-c75-img:latest(被 tag 为 :old,别的 bwlab 镜像无) docker images --filter dangling=true --filter label=bwlab=1 → 0 个悬空镜像 docker image prune -f --filter label=bwlab=1:Total reclaimed space: 0B 之后 bwlab-c75-img 镜像还在吗?在 docker image prune -a -f --filter label=bwlab=1:Deleted Images: | untagged: bwlab-c75-img:latest | untagged: bwlab-c75-img:old | deleted: sha256:b28fa84b254c56d14eba4ef72654d649b085a85c04f56c82472c21b6cfade177 | | Total reclaimed space: 9.723kB 之后 bwlab-c75-img 还在吗?没了
container prune 删所有已停止的容器(exited、created),不管运行中的;image prune 默认只删悬空镜像,加 -a 才删所有没有容器使用的镜像。
现有:一个命名卷 bwlab-c75-named(带标签),以及 run --rm -v /anon-data 留下的匿名卷:12 个悬空卷(含别人的) docker volume prune -f --filter label=bwlab=1:Total reclaimed space: 0B;bwlab-c75-named 还在吗?在 docker volume prune -a -f --filter label=bwlab=1:Deleted Volumes: | bwlab-c75-named | | Total reclaimed space: 0B;bwlab-c75-named 还在吗?没了
volume prune 默认只清匿名卷,命名卷即使没有容器引用也保留;加 -a 才删。数据在卷里,所以这是个安全的默认。
docker network prune -f --filter label=bwlab=1:Deleted Networks: | bwlab-c75-net
network prune 删除没有任何容器连接的自定义网络。
整个 Docker 里的容器 8 → 8,镜像 7 → 7,卷 19 → 19,网络 4 → 4(我的对象已全部清理,数量应与开始时一致) 本实验的对象还剩:(0, 0, 0, 0)
前后对比整个 Docker 的对象数量(容器 8、镜像 7、卷 19、网络 4)没有变化,说明过滤起了作用。