问题:
在 Linux
环境上使用 docker
命令 <docker pull 镜像>
拉取镜像的时遇到了 No space left on device
的问题。
排查过程:
初步分析可能是存储镜像的路径磁盘满了。
但是使用 df -h
命令之后,发现磁盘还有空间。于是猜测应该是 docker
自身占用的磁盘满了。
1、使用下面的命令,查看 docker
所在的位置
docker info
返回下面的信息
从上面的图可以看出, 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 system
或 docker container
命令清理容器
5、删除已停用容器
docker container prune
6、删除关闭的容器、无用的数据卷和网络,以及dangling镜像
docker system prune
7、清理得更加彻底,可以将没有容器使用 docker
的镜像都删掉
docker system prune -a