1. du -sh *

image.png

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.
docker /var/lib/docker/目录下的磁盘占用太大 - 图2

2,解决办法

(1)首先执行如下命令可以查看 docker 文件夹磁盘使用情况:

  1. du -hs /var/lib/docker/

image.png

(2)执行如下可以查看 Docker 的磁盘使用情况(类似于 Linux 上的 df 命令):

  1. docker system df

image.png
(3)执行如下命令可以清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)

  1. docker system prune

注意:还可以使用 docker system prune -a 命令清理,该命令清理得更加彻底,可以将没有容器使用 Docker 镜像都删掉。

image.png

附:清理 Volumes 数据

(1)从上面 Docker 磁盘空间查看结果可以发现,容器持久化存储(Local Volumes)占用的空间也挺大,我们也可以进行定时清理。
docker /var/lib/docker/目录下的磁盘占用太大 - 图6

(2)执行如下命令可以批量删除所有的孤儿 volume(即没有任何容器用到的 volume

  1. docker volume rm $(docker volume ls -q)

(3)清理后可以查看下目前使用的所有 volume

  1. docker volume ls

docker /var/lib/docker/目录下的磁盘占用太大 - 图7

(4)使用 docker inspect 命令可以查看某个 volume 的具体信息,比如挂载在本机的那个目录路径下:

  1. docker inspect edgex_log-data

docker /var/lib/docker/目录下的磁盘占用太大 - 图8

(5)使用 du -sh 命令可以查看某个目录占用的大小。

  1. du -sh

docker /var/lib/docker/目录下的磁盘占用太大 - 图9

(6)如果发现体积太大可以进入进行清理,或者进入后直接执行 rm -rf * 命令将该目录下的所有文件删除。
https://www.hangge.com/blog/cache/detail_2555.html