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多的空间

相关推荐
发量惊人的中年网工17 小时前
抗DDoS服务哪家比较靠谱?选DDoS防护服务重点看哪几点?
运维·ddos
Meta Luo18 小时前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
爱和冰阔落18 小时前
【Linux】线程安全进阶:单例模式、可重入函数与死锁排查
linux·运维·安全·单例模式
dk_tjy18 小时前
迪康网络运维故障自愈的自动化闭环技术路径分析
运维·网络·自动化
吉普赛的歌19 小时前
如何设置服务器固定时间点自动重启一次
运维·服务器
帷幕落秋19 小时前
SSH远程管理服务
运维·ssh
一世繁华行19 小时前
CAPL浏览器(翻译自官方文档)
运维·服务器·数据库
万联WANFLOW19 小时前
让分散的设备像在同一张局域网里:企业组网技术解析
运维·网络·网络安全·智能路由器
风翼靓崽19 小时前
ubuntu22.04 rsyslog分离ssh单独日志文件
运维·ssh
IT小小猪20 小时前
从零搭建K8s 集群
云原生·容器·kubernetes