← 中文资源

简体中文版本

趁磁盘还没满配好容器日志轮转

按容器或守护进程设置 json-file 日志驱动的轮转参数,验证 max-size/max-file 生效并对剩余磁盘告警。

阅读英文原文

目标

默认 json-file 驱动无限追加日志,一次误开的 debug 级别就能在一夜之间填满根盘、杀死宿主机上的所有容器。轮转从机制上限定伤害:单文件 10MB、每容器 3 个文件,不依赖任何人记得清理。配置本身很简单,纪律在于在事故之前而不是之后把它配上。

步骤要点

  1. 用 du 检查 /var/lib/docker/containers/*/ 的日志体积,确认存在数 GB 的无界日志。
  2. 在 daemon.json 里为 json-file 驱动配 max-size 10m / max-file 3,默认每容器上限 30MB。
  3. 对高日志量容器在 run/compose 里单独覆盖为 50m×5。
  4. systemctl restart docker 后用 docker inspect 的 LogConfig 确认参数确实生效。
  5. 人为产生几十 MB 日志后复测磁盘占用,验证轮转把体积锁在封顶之内。

排错提示

参数对已存在容器不生效,因为日志配置在创建时固定,需滚动重建容器;已塞满磁盘的存量日志用 truncate -s 0 截断而不是删除,直接删会破坏 docker 持有的文件句柄;需要更长留存说明轮转只是磁盘护栏而非留存策略,先把日志送到中心化系统再收紧本地上限。

适用边界

max-file 只限定本地排障历史,合规性留存必须靠中心化存储;若用 local/journald 等其他驱动,需应用等价参数。

代码示例

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