背景
根目录磁盘空间不多,就只剩5个G左右了,操作需要,涉及到频繁创建/删除容器,发现每创建一个容器,在删除后,磁盘空间并没有恢复。久而久之。根目录就满了
# docker 空间占用查看
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 2.06GB 0B (0%)
Containers 4 3 598.1kB 0B (0%)
Local Volumes 39 3 5.854GB 5.325GB (90%)
Build Cache 0 0 0B 0B
虚拟机内实际运行的只有四个容器,但是这里显示容器卷有39个
$ docker system df -v
命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间
清理方法
# 删除无用卷
$ docker volume prune
删除后再次查看,空间即释放掉了
其他清理容器/镜像的方法
1、自动清理命令
# 对空间进行自动清理
$ docker system prune
"""
该命令所清理的对象如下:
已停止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
所有悬空的镜像
"""
# docker system prune 后可以加额外的参数,如:
# docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
# docker system prune -f : 用以强制删除,不提示信息
另外除了 system 级别的,还有针对容器或是镜像级别的删除命令:
$ docker image prune:删除悬空的镜像
# 悬空镜像(dangling image):未配置任何 Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定 -t 参数配置 Tag 导致的
$ docker container prune:删除无用的容器
--默认情况下 docker container prune 命令会清理掉所有处于 stopped 状态的容器
--如果不想那么残忍统统都删掉,也可以使用 --filter 标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但 24 内创建的除外:
--$ docker container prune --filter "until=24h"
$ docker volume prune:删除无用的卷。
$ docker network prune:删除无用的网络
2、手动清除
对于悬空镜像和未使用镜像可以使用手动进行个别删除:
1、删除所有悬空镜像,不删除未使用镜像:
$ docker rmi $(docker images -f "dangling=true" -q)
2、删除所有未使用镜像和悬空镜像
$ docker rmi $(docker images -q)
3、清理卷
如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):
# 删除所有未被容器引用的卷
$ docker volume rm $(docker volume ls -qf dangling=true)
4、容器清理
如果发现是容器占用过高的空间,可以手动删除一些:
# 删除所有已退出的容器
$ docker rm -v $(docker ps -aq -f status=exited)
# 删除所有状态为 dead 的容器
$ docker rm -v $(docker ps -aq -f status=dead)
评论区