docker 报错 No space left on device

问题:

Linux 环境上使用 docker 命令 拉取镜像的时遇到了 No space left on device 的问题。

排查过程:

初步分析可能是存储镜像的路径磁盘满了。

但是使用 df -h 命令之后,发现磁盘还有空间。于是猜测应该是 docker 自身占用的磁盘满了。

1、使用下面的命令,查看 docker 所在的位置

docker info

返回下面的信息
docker 报错 No space left on device_第1张图片
从上面的图可以看出, docker 所在的路径为 /var/lib/docker

2、使用下面的命令,查看 docker 路径下占用情况

df -h /var/lib/docker/

返回下面信息

[root@docker ~]# df -h /var/lib/docker/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   39G     0 100% /

由上可知我们 docker 的磁盘占有率已经满了,需要清理。或者挂载到一块大磁盘上。

也可以使用 docker system df 命令。来查看 docker 占用的空间情况。下面是参数说明

  • Images:所有镜像占用的空间,包括拉下来的和本地构建的
  • Containers:运行容器占用的空间,表示每个容器的读写层的空间
  • Local Volumes:容器挂载本地数据卷的空间
  • Build Cache:镜像构建过程中产生的缓存空间(Docker 18.09后,使用BuildKit才有)
  • RECLAIMABLE 是可回收大小

3、清理无效数据文件

切换到 docker 根路径,查找占用空间大的文件,并根据情况清理文件。也可以全部清除

关闭 docker
systemctl stop docker
切换到 docker 目录下
cd /var/lib/docker
删除所有
rm -rf  ./*
启动 docker
systemctl start docker

注意:在删除 /var/lib/docker/ 下目录时,需要将docker服务停止。

删除 /var/lib/docker/ 目录下文件,最好提前做个备份,可以恢复。

其他命令

1、查看所有已经停止的容器

docker ps -a|grep Exited

2、删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)

docker rm $(docker ps -a -q)

3、根据容器的状态,删除Exited状态的容器

docker rm $(docker ps -qf status=exited)

4、显示所有状态为Exited的容器,取出这些容器的ID

docker ps -a|grep Exited|awk '{print $1}'

根据ID删除容器

docker rm `docker ps -a|grep Exited|awk '{print $1}'`

docker 1.13 版本以后,可以使用 docker systemdocker container 命令清理容器

5、删除已停用容器

docker container prune

6、删除关闭的容器、无用的数据卷和网络,以及dangling镜像

docker system prune

7、清理得更加彻底,可以将没有容器使用 docker 的镜像都删掉

docker system prune -a

你可能感兴趣的:(Docker,Linux,docker)