目标
默认 json-file 驱动无限追加日志,一次误开的 debug 级别就能在一夜之间填满根盘、杀死宿主机上的所有容器。轮转从机制上限定伤害:单文件 10MB、每容器 3 个文件,不依赖任何人记得清理。配置本身很简单,纪律在于在事故之前而不是之后把它配上。
步骤要点
- 用 du 检查 /var/lib/docker/containers/*/ 的日志体积,确认存在数 GB 的无界日志。
- 在 daemon.json 里为 json-file 驱动配 max-size 10m / max-file 3,默认每容器上限 30MB。
- 对高日志量容器在 run/compose 里单独覆盖为 50m×5。
- systemctl restart docker 后用 docker inspect 的 LogConfig 确认参数确实生效。
- 人为产生几十 MB 日志后复测磁盘占用,验证轮转把体积锁在封顶之内。
排错提示
参数对已存在容器不生效,因为日志配置在创建时固定,需滚动重建容器;已塞满磁盘的存量日志用 truncate -s 0 截断而不是删除,直接删会破坏 docker 持有的文件句柄;需要更长留存说明轮转只是磁盘护栏而非留存策略,先把日志送到中心化系统再收紧本地上限。
适用边界
max-file 只限定本地排障历史,合规性留存必须靠中心化存储;若用 local/journald 等其他驱动,需应用等价参数。
代码示例
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}