Docker -- No space left on device

背景:

测试的时候,发现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多的空间

相关推荐
Ruiery1 小时前
Linux 6.6内核 CPU 深度解析(八):percpu 变量 — 每个 CPU 一份数据,无锁访问
linux·运维·服务器
wzq11_6661 小时前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
程序猿老A2 小时前
云服务器怎么配置视频存储?
运维·服务器·音视频
程序员老陆2 小时前
Docker 命令全景指南:从镜像构建到生产运维
运维·docker·容器
Είναι η κοπέλα2 小时前
WSL2 部署 AI 开发环境:内核级 Linux + GPU 直通
linux·运维·人工智能
其实防守也摸鱼2 小时前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss
2401_868534782 小时前
简要说明PON下行和上传数据方式
运维·服务器·网络
weixin_403810132 小时前
iOS 自动化脚本怎么输入文字:代理、输入法与快捷指令三级方案
运维·ios·自动化
ai小陈11 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力