容器日志把磁盘吃满,先止血再防复发

举报
yd_212633117 发表于 2026/11/05 09:28:42 2026/11/05
【摘要】 容器里的日志把磁盘吃满,是线上最常见也最容易反复发生的一类问题。删一次日志能救急,但如果不把限制写进配置,过几天它还会回来。下面按「先止血、再定位、最后防复发」的顺序走一遍。一、先看清是谁在占盘docker system df 会列出镜像、容器可写层、卷和构建缓存各自占多少空间。很多时候看到的是镜像占大头,但真正每天在涨的是某个容器的日志文件。容器日志默认落在 /var/lib/docker...

容器里的日志把磁盘吃满,是线上最常见也最容易反复发生的一类问题。删一次日志能救急,但如果不把限制写进配置,过几天它还会回来。下面按「先止血、再定位、最后防复发」的顺序走一遍。

一、先看清是谁在占盘

docker system df 会列出镜像、容器可写层、卷和构建缓存各自占多少空间。很多时候看到的是镜像占大头,但真正每天在涨的是某个容器的日志文件。容器日志默认落在 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log,用 du -sh 对这几个目录排序,就能找出增长最快的那一个,再对着容器 ID 去 docker ps 里确认是哪个服务。

二、急着恢复写入,先做临时处理

空间彻底满了会连带影响其他服务,先恢复可用性最重要。清空日志文件要用 truncate -s 0 文件路径,不要直接 rm,因为 rm 之后文件描述符还在,空间不会马上归还,反而让人误判没效果。清理完之后立刻用 df -h 确认使用率下降。

三、把限制写进 daemon.json

临时清理只是止血,根治要在 /etc/docker/daemon.json 里给默认日志加限制:

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

改完必须 systemctl reload docker,之后新建的容器才会生效。已经在跑的容器不会自动套用新配置,需要重建容器,或者单独给它加上 --log-opt。这一点经常被忽略,结果第二天发现问题照旧。

四、让应用自己少写日志

日志暴涨的根因往往在应用。把错误日志和调试日志分开,生产环境不要开 debug 级别,异常里不要把整个请求体或大对象打出来。如果确实需要保留完整日志做审计,就在采集端做轮转和归档,而不是让容器本地一直堆着。

五、留一条告警,而不是等人发现

把磁盘使用率和单容器日志文件大小都做成告警,阈值分别设在 80% 和 2GB 左右。告警内容里带上容器名和宿主机,值班的人不用先登录再查就能判断该处理哪台机器。日志问题几乎不会一次消失,真正管用的是那个提前响的告警。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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