容器日志过大占用磁盘怎么配置 Docker Compose 日志轮转

文章导读
最推荐的做法是在 docker-compose.yml 文件中为服务添加 logging 配置,限制单个日志文件的大小和保留数量,适用于大多数使用默认 json-file 驱动的场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

最推荐的做法是在 docker-compose.yml 文件中为服务添加 logging 配置,限制单个日志文件的大小和保留数量,适用于大多数使用默认 json-file 驱动的场景。

先说结论:通过 Compose 文件配置日志轮转是管理磁盘占用的标准方式,但需要重建容器才能生效。

  • 适合:使用 Docker Compose 管理且未更改默认日志驱动的项目
  • 先准备:确认当前日志驱动类型及现有日志文件大小
  • 验收:检查容器 inspect 信息中的 LogPath 及文件大小变化

命令速用版

在 docker-compose.yml 的服务层级加入以下配置片段,注意缩进对齐:

容器日志过大占用磁盘怎么配置 Docker Compose 日志轮转
services:
  your_service:
    image: nginx
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

修改后执行 docker-compose up -d 重建容器。

容器日志过大占用磁盘怎么配置 Docker Compose 日志轮转

为什么会这样

Docker 默认使用 json-file 驱动记录容器标准输出,该驱动不会自动清理日志。随着运行时间增加,日志文件会持续写入直到占满磁盘分区。官方文档指出,日志驱动选项需要在容器创建时指定,运行中的容器无法直接修改日志配置。

分步处理

  1. 确认驱动类型:执行 docker inspect <容器名> | grep LogPath,确认路径结尾通常为 -json.log,表明使用的是 json-file 驱动。
  2. 编辑配置文件:打开 docker-compose.yml,在对应服务下添加 logging 段落,设置 max-size(单文件上限)和 max-file(保留文件数)。
  3. 重建容器:运行 docker-compose up -d,Compose 会检测到配置变更并重建容器。注意这会中断服务片刻。
  4. 清理旧日志:重建后旧日志文件可能仍保留在磁盘上,需手动查找 LogPath 指向的文件并清理过大部分。

怎么验证是否生效

再次执行 docker inspect <容器名>,在 LogPath 附近查看是否有 MaxSize 和 MaxFile 字段显示刚才设置的值。同时观察宿主机上日志文件目录,确认不再产生单个超大文件,而是生成类似 .1, .2 的轮转文件。

常见坑

  • 配置不生效:仅修改 yml 文件而不重建容器,配置不会应用。必须确保容器被重新创建。
  • 驱动不匹配:如果全局配置了 journald 或 syslog 驱动,compose 中的 json-file 配置可能无效,需保持驱动一致。
  • 设置过小:max-size 设置过小可能导致关键报错日志被快速轮转覆盖,建议根据实际业务量调整,公开资料中没有看到可靠的量化数据建议具体数值,通常 10m 到 100m 之间较为常见。

参考来源

  • Docker Compose file reference, Services logging, URL: https://docs.docker.com/compose/compose-file/05-services/#logging
  • Docker Configure logging drivers, URL: https://docs.docker.com/config/containers/logging/configure/