Docker - 解决/var/lib/docker/overlay2占用很大、容器无法启动问题(清理磁盘)
1,问题描述
最近打算运行一个容器时发现启动不了,报如下错误:
Creating edgex-custom-alarm ... error
ERROR: for edgex-custom-alarm Cannot create container for service custom-alarm: mkdir
/var/lib/docker/overlay2/8d6cfd2bc1c005b616a7efd99d6493f9a661a9b1c01f5df8b97228317086ba61-init: no space left on device
ERROR: for custom-alarm Cannot create container for service custom-alarm: mkdir
/var/lib/docker/overlay2/8d6cfd2bc1c005b616a7efd99d6493f9a661a9b1c01f5df8b97228317086ba61-init: no space left on device
ERROR: Encountered errors while bringing up the project.
ERROR: for edgex-custom-alarm Cannot create container for service custom-alarm: mkdir
/var/lib/docker/overlay2/8d6cfd2bc1c005b616a7efd99d6493f9a661a9b1c01f5df8b97228317086ba61-init: no space left on device
ERROR: for custom-alarm Cannot create container for service custom-alarm: mkdir
/var/lib/docker/overlay2/8d6cfd2bc1c005b616a7efd99d6493f9a661a9b1c01f5df8b97228317086ba61-init: no space left on device
ERROR: Encountered errors while bringing up the project.
2,解决办法
(1)首先执行如下命令可以查看 docker 文件夹磁盘使用情况:
du -hs /var/lib/docker/
(2)执行如下可以查看 Docker 的磁盘使用情况(类似于 Linux 上的 df 命令):
docker system df
(3)执行如下命令可以清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)
docker system prune
注意:还可以使用 docker system prune -a 命令清理,该命令清理得更加彻底,可以将没有容器使用 Docker 镜像都删掉。
附:清理 Volumes 数据
(1)从上面 Docker 磁盘空间查看结果可以发现,容器持久化存储(Local Volumes)占用的空间也挺大,我们也可以进行定时清理。
(2)执行如下命令可以批量删除所有的孤儿 volume(即没有任何容器用到的 volume)
docker volume rm $(docker volume ls -q)
(3)清理后可以查看下目前使用的所有 volume:
docker volume ls
(4)使用 docker inspect 命令可以查看某个 volume 的具体信息,比如挂载在本机的那个目录路径下:
docker inspect edgex_log-data
(5)使用 du -sh 命令可以查看某个目录占用的大小。
(6)如果发现体积太大可以进入进行清理,或者进入后直接执行 rm -rf * 命令将该目录下的所有文件删除。