容器跑了一个月,日志把磁盘吃满了

举报
yd_298384123 发表于 2026/11/07 09:42:45 2026/11/07
【摘要】 上周有台机器报警,磁盘跑到 92%。登上去 df 一看,根分区只剩三个 G。第一反应是找大文件,du 一层一层往下翻,最后停在 /var/lib/docker/containers。占空间的既不是镜像也不是数据卷,是每个容器目录里那个 xxx-json.log。几个跑得勤的容器各自攒了好几 G,加起来二十多个 G。原因不复杂。Docker 默认用 json-file 驱动,不设上限就一直往下...

上周有台机器报警,磁盘跑到 92%。登上去 df 一看,根分区只剩三个 G。第一反应是找大文件,du 一层一层往下翻,最后停在 /var/lib/docker/containers。

占空间的既不是镜像也不是数据卷,是每个容器目录里那个 xxx-json.log。几个跑得勤的容器各自攒了好几 G,加起来二十多个 G。

原因不复杂。Docker 默认用 json-file 驱动,不设上限就一直往下写,容器不重启它就不会滚。我那台机器上有个每几秒打一次心跳的服务,一个月能写出十几 G。平时不看日志感觉不到,等磁盘红了才暴露。

要治这个事,得分两步走。

新容器好办,启动时带上参数就行,给日志设个大小和文件个数,超了自动轮转。max-size 给 10m,max-file 给 3,一个容器最多占 30m,跑再久也不会失控。

老容器麻烦一点。日志配置是创建时写进容器元数据的,改不了,只能重建。我的做法是先把现有的日志文件清空,把磁盘救回来,再挑时间重建容器。

清空这里有个坑:不要直接 rm 掉日志文件。文件被删了但容器进程还持有句柄,空间不会释放,du 看着降了 df 还是满的。正确做法是把文件内容清空而不是删除,末尾没数据了,内核才会把块真正还回来。

这一步做完,磁盘立刻能回一部分。之后新建的容器都带轮转参数,老容器在下次升级时慢慢换掉。

最后一件事,也是最容易忽略的:这事得有监控。磁盘使用率过 80% 就该报出来,别等 92% 才想起看。我现在的做法是每天定时跑个脚本,几台机器一起查,超阈值就推到手机上。花十分钟写的东西,省掉一次半夜处理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。