Docker 容器日志轮转:json-file 为什么会打满磁盘?
Docker 默认 json-file 日志如果不限制大小,异常服务会快速占满磁盘。本文介绍日志轮转配置和排查方式。
Docker 容器日志默认常见驱动是 json-file。如果没有设置 max-size 和 max-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 日志。
