首页/云/Docker 容器速查/容器日志占盘与轮转
容器排障52 条

容器日志占盘与轮转

json-file 默认不轮转:容器持续输出会撑大 /var/lib/docker/containers 下的日志文件,用 max-size/max-file 控制或改 daemon 默认。

Docker 容器速查云更新于 2026-10-13

日志为什么占盘

容器日志默认由 json-file 驱动写入宿主上的文件,而且默认不轮转:容器持续输出,对应文件就一直变大,最终可能撑满整个数据分区。控制方式有两种:创建容器时用日志选项限定单文件大小与保留个数,或者在守护进程配置里下发全局默认值,后者只对之后新建的容器生效。

基本信息

默认驱动json-file,写入宿主文件且默认不轮转
运行参数--log-opt max-size=10m --log-opt max-file=3
守护进程级daemon.json 里的 log-opts 下发默认值
生效时机创建容器时写入
查看方式按占用排序找出大日志文件

典型使用场景

  • 长跑服务上线前统一加轮转参数
  • 磁盘告警后定位并清空已经写大的日志
  • 为整套环境下发默认轮转策略
  • 排障期临时放宽上限,定位完成后恢复
  • 统计各容器日志占用,找出主要贡献者

限制与回收

限制与回收
docker run -d --log-opt max-size=10m --log-opt max-file=3 --name web nginx:1.27
du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -h | tail -5   # 找大日志
truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log    # 已写大的文件用清空方式回收
docker inspect -f '{{.HostConfig.LogConfig}}' web              # 核对容器的日志配置

设置位置与生效范围

对象设置位置生效范围
单个容器运行参数中的日志选项仅该容器
守护进程默认守护进程配置文件新建容器
已有容器参数需重建后生效重建才写入
日志文件数据目录下的容器目录轮转后保留最近若干份
已经写大的日志要用清空内容的方式回收空间:直接删除正在写入的文件不会立即释放,进程仍持有该文件的句柄。
轮转参数只在创建容器时写入,存量容器需要重建才会生效;守护进程默认值同样只作用于新建的容器。
另一类做法是把日志驱动换成写入宿主本地文件的驱动,日志由宿主侧统一轮转,代价是读取容器日志的习惯需要相应调整。

易错点

  • 直接删除正在写入的日志文件:空间不会立刻释放,还可能让写入方报错
  • 只给部分服务配轮转:剩下那些往往正是占盘的元凶,策略要统一
  • 改守护进程默认值后期待存量容器生效:默认值只作用于新建容器
  • 只配置上限不看磁盘余量:日志量大时轮转很快,磁盘仍要留足空间

数据来源与参考

  • Docker 官方文档:json-file logging 与 log-opts(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌