背景:
测试的时候,发现docker启动容器报错,报错内容如下
/usr/local/bin/jenkins.sh: line 17: echo: write error: No space left on device
原因
因为linux虚拟机我只给了15g的大小,导致磁盘空间不够了
查看命令
df =h

根目录基本已经满了
查看cpu的使用情况,发现cpu的使用率并不高,那就是文件太大导致空间不够
df -i /

查看时哪个目录文件大
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

发现var目录很大,继续往下看目录
sudo du -h --max-depth=1 /var 2>/dev/null | sort -hr | head -20

发现大文件在/var/lib目录下,这时候大概已经猜出来是docker的问题了,直接往下跟
sudo du -h --max-depth=1 /var/lib/docker/ 2>/dev/null | sort -hr | head -20

最后确定大文件都在/var/lib/docker/overlay2目录下,这里面存放所有镜像层和容器层数据
分析
docker 下载镜像和构建容器都是占用大量的磁盘空间,我们有时候会删除部分镜像和容器,但是因为使用的是 docker rm 或者 docker rmi 命令,只是删除了镜像但是没释放磁盘空间,导致系统没空间了
解决
清理未使用的镜像、容器和网络
docker system prune -a


释放了1.38G空间
查看各镜像和容器占用空间
docker system df

发现volums的目录也很大,里面主要是挂载卷的目录数据,暂时不清理,以后再考虑
教训
以后使用删除镜像或者容器的命令时,一定要连磁盘内的数据一起删除,定时清理不使用的容器和镜像,还有挂载卷清理,参考命令
docker rm -v (容器名或者id)
docker volume rm (容器名或者id)
挂载卷全删(慎用),执行完挂载卷全清
docker volume rm $(docker volume ls -q)

最后,查看清理效果,清理了5G多的空间
