Docker 日志把磁盘吃光了?三招管住 json-file 日志

举报
1swei 发表于 2026/11/01 08:52:35 2026/11/01
【摘要】 很多人的服务器第一次"无故"宕机,凶手都是 Docker 日志。默认的 json-file 日志驱动不做任何轮转,容器跑得越久,/var/lib/docker/containers 下的 *-json.log 越大,直到把磁盘写满、服务全挂。下面三招,从治标到治本。第一招:先止血——找到并清理大日志先看是谁在吃磁盘:du -sh /var/lib/docker/containers//-js...

很多人的服务器第一次"无故"宕机,凶手都是 Docker 日志。默认的 json-file 日志驱动不做任何轮转,容器跑得越久,/var/lib/docker/containers 下的 *-json.log 越大,直到把磁盘写满、服务全挂。下面三招,从治标到治本。

第一招:先止血——找到并清理大日志

先看是谁在吃磁盘:

du -sh /var/lib/docker/containers//-json.log | sort -rh | head

确认是日志文件后可以直接截断(不要 rm,容器还 hold 着文件句柄,删了空间也不释放):

: > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

或者用 truncate -s 0。服务不用停,立刻见效。

第二招:给日志加上轮转

清理完只是续命,日志还会继续涨。在 daemon.json 里给所有容器设个上限:

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

改完重启 docker 生效。已有的容器不受影响——需要 recreate 才会用上新配置。也可以在 docker-compose.yml 里按服务单独配:

logging:
  driver: json-file
  options:
    max-size: "10m"
    max-file: "3"

第三招:从源头少打日志

轮转是兜底,日志量本身也值得管:

  1. 把应用日志级别从 debug 调到 info/warn,开发环境的啰嗦日志别带到线上。
  2. 健康检查、定时任务的周期性输出最容易被忽视,一个每 5 秒打一行的探针,一天就是 17000+ 行。
  3. 真正的业务日志走集中式收集(比如 Loki、ELK),容器本地只留最近几天的排错用量。

验证与排错

  • 配完后用 docker inspect <容器> | grep -A5 LogConfig 确认生效。
  • 日志突然不写了?先看是不是 max-size 设得太小导致高频轮转丢日志——排错期间可以临时调大。
  • 别把日志驱动换成 none 来"省事",出问题时没有现场日志会哭。

小结:先截断止血,再用 max-size/max-file 设上限,最后从日志级别和采集架构上治本。三步做完,磁盘半夜被日志打满这种事故基本可以告别。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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