问题:docker “no space left on device”
在centos7 环境上使用<docker pull 镜像> 命令时遇到了 “no space left on device”可能是存储镜像的路径磁盘满了
报错:
failed to register layer: Error processing tar file(exit status 1): write /home/ym/Python-3.6.5/Modules/_elementtree.c: no space left on device
里面说python 安装包的一些问题,不用管这,重点是后面。
1. 首先查看服务器硬盘空间
执行指令
df -h
可以看到空间不足,但是我们是在docker执行命令造成的情况,因此来docker查看信息
2. 查看docker 信息
docker info
3. 查看docker根路径的磁盘占用率
由上可知我们docker的磁盘占有率已经满了,需要清理
[root@iz2zejf0fjkrh3aalbiatoz ~]# df -h /var/lib/docker/
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 39G 0 100% /
4. 清理无效数据文件
切换到docker根路径,查找占用空间大的文件,并根据情况清理文件
[root@iz2zejf0fjkrh3aalbiatoz ~]# cd /var/lib/docker
[root@iz2zejf0fjkrh3aalbiatoz ~]# ll -h
也可以全部清除
删除/var/lib/docker/目录下文件,最好提前做个备份,可以恢复。
注意
:再删除/var/lib/docker/下目录时,需要将docker服务停止。
systemctl stop docker
rm -rf ./*
systemctl start docker
5. 清理docker环境已经停止的容器
查看所有已经停止的容器
docker ps -a|grep Exited
方法一:删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
docker rm $(docker ps -a -q)
方法二:根据容器的状态,删除Exited状态的容器
docker rm $(docker ps -qf status=exited)
方法三:docker 1.13版本以后,可以使用 docker system 或 docker container命令清理容器。
docker container prune
删除已停用容器
docker container prune
[root@iz2zejf0fjkrh3aalbiatoz]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
e2c332ba5966e682819a0204b8db383bc02fb93d7f82318e767a2146d49e79ff
cca593f33f9bbb0a8d532b1ae05b4b714243f59f5e332c68322c8d973bcd139f
...
e02183e21c9f5a8061021e441ffc52373b17d0e9a18d4f75409fec7f5ed328ac
66ac47f088b67ae01c57c4f7fcf9d369cbb73d9556d2e8b4675fbbb2a7958792
9801b8f022b88525df10f3e51a800367239726210ebb5d6c1ec5b3cdeb16cb4d
9af5984dd779804096c57958e615ea5dbdf25d3f1f17df536b8d6efa3d506c63
ba4fbfe9205149f08b5392b09fb54a7f6718451d6f69eb4236c0dd585cf33814
Total reclaimed space: 13.78GB
docker system prune
删除关闭的容器、无用的数据卷和网络,以及dangling镜像
[root@iz2zejf0fjkrh3aalbiatoz]# docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
docker system prune -a
命令清理得更加彻底,可以将没有容器使用Docker的镜像都删掉
[root@iz2zejf0fjkrh3aalbiatoz yu]# docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
方法四:根据容器的ID删除容器
显示所有状态为Exited的容器,取出这些容器的ID
docker ps -a|grep Exited|awk '{print $1}'
根据ID删除容器
docker rm `docker ps -a|grep Exited|awk '{print $1}'`