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

相关推荐
xbzb23 分钟前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI5 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
无奈笑天下5 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai45455 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS7 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
xbzb9 小时前
自建镜像仓库:registry 一条命令 + harbor 部署、授权、跨库同步与卸载
docker·harbor·镜像·仓库·同步·registry
雪落漂泊9 小时前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
分布式存储与RustFS9 小时前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS1 天前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天1 天前
服务器和虚机配置IPV6
运维·服务器·github