上一篇 下一篇 分享链接 返回 返回顶部

容器磁盘暴涨?清理实操指南

发布人: 发布时间:1 天前 阅读量:3

问题背景

在生产或开发环境中,容器化应用常因日志堆积、未清理的镜像层、悬空卷等导致磁盘占用飙升,甚至触发存储告警。本文提供一套可立即执行的清理流程,适用于Docker及containerd环境。

一、诊断磁盘占用

执行以下命令快速定位消耗源:

docker system df

该命令会按镜像、容器、卷、构建缓存分类显示占用空间。若需查看具体容器的磁盘写入量:

docker ps --size

二、清理未使用的对象

1. 清理所有未使用的资源

运行docker system prune并附加--volumes标志来删除:停止的容器、未被任何容器引用的网络、悬空镜像(dangling images)以及所有未使用的卷。

docker system prune -a --volumes -f

注意:-a会删除所有未使用的镜像(而非仅悬空镜像),-f跳过确认。

2. 单独清理镜像

若需保留部分镜像,可先查看镜像列表:

docker images --digests

然后批量删除:

docker image prune -a -f

3. 清理构建缓存

Docker BuildKit默认在/var/lib/docker/buildkit下累积大量缓存。执行:

docker builder prune -a -f

该操作会删除所有构建缓存,释放大量空间。

三、日志文件专项清理

容器日志默认写入宿主机/var/lib/docker/containers下的JSON文件,且不会自动轮转。

1. 手动清理日志文件

定位日志文件:

ls -lh /var/lib/docker/containers/*/*.log

清空文件内容(不删除文件):

truncate -s 0 /var/lib/docker/containers/*/*.log

2. 设置日志轮转

在启动容器时添加--log-opt参数限制日志大小:

docker run --log-opt max-size=10m --log-opt max-file=3

也可在daemon.json中全局配置:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

修改后重启Docker Daemon:systemctl restart docker

四、卷与临时文件清理

1. 移除未使用的卷

docker volume prune -f

2. 清理容器内临时文件

进入容器或使用docker exec删除/tmp/var/cache等目录:

docker exec -it  rm -rf /tmp/*

注意:该操作可能影响正在运行的服务,建议在业务低峰期执行。

五、深入分析镜像层

工具dive可逐层查看镜像文件变动:

dive 

帮助识别哪些层产生了额外体积(如无用的包缓存、中间产物),进而优化Dockerfile减少层数。

六、定期自动化

将清理命令加入crontab:

0 3 * * 0 docker system prune -a --volumes -f

每周日凌晨3点自动清理。

总结

容器磁盘暴涨多由未清理的镜像、日志和构建缓存引起。通过上述步骤,大部分场景可回收30%~70%的已用空间。建议结合日志轮转策略和定期cron任务,从源头控制增长。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com