技术博客

Docker 容器日志轮转:json-file 为什么会打满磁盘?

Docker 默认 json-file 日志如果不限制大小,异常服务会快速占满磁盘。本文介绍日志轮转配置和排查方式。

Docker日志日志轮转磁盘空间运维规范

Docker 容器日志默认常见驱动是 json-file。如果没有设置 max-sizemax-file,容器标准输出会持续写到宿主机磁盘。应用一旦异常刷日志,很快就可能把 /var/lib/docker 打满。

磁盘打满后,影响的不只是这个容器。Docker daemon、其它容器、系统日志、甚至 SSH 登录都可能出现问题。

如何确认日志占用

可以先查看 Docker 根目录:

docker info | grep "Docker Root Dir"

再检查容器日志目录:

du -sh /var/lib/docker/containers/*

也可以用 docker logs --tail 判断是否存在异常刷屏。

配置日志轮转

/etc/docker/daemon.json 中配置:

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

修改后需要重启 Docker,新创建的容器会使用新配置。已有容器是否生效要结合环境验证,生产变更前要做好窗口和回滚。

更好的做法

本机日志轮转只是底线。生产环境应该把容器日志采集到集中平台,例如 Loki、Elasticsearch、OpenSearch 或云厂商日志服务。本机保留短周期,集中平台负责查询、告警和归档。

同时,应用也要控制日志级别。不要在正常请求路径里输出大量 debug 日志。

参考资料