最推荐的做法是在 docker-compose.yml 文件中为服务添加 logging 配置,限制单个日志文件的大小和保留数量,适用于大多数使用默认 json-file 驱动的场景。
先说结论:通过 Compose 文件配置日志轮转是管理磁盘占用的标准方式,但需要重建容器才能生效。
- 适合:使用 Docker Compose 管理且未更改默认日志驱动的项目
- 先准备:确认当前日志驱动类型及现有日志文件大小
- 验收:检查容器 inspect 信息中的 LogPath 及文件大小变化
命令速用版
在 docker-compose.yml 的服务层级加入以下配置片段,注意缩进对齐:
services:
your_service:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"修改后执行 docker-compose up -d 重建容器。
为什么会这样
Docker 默认使用 json-file 驱动记录容器标准输出,该驱动不会自动清理日志。随着运行时间增加,日志文件会持续写入直到占满磁盘分区。官方文档指出,日志驱动选项需要在容器创建时指定,运行中的容器无法直接修改日志配置。
分步处理
- 确认驱动类型:执行
docker inspect <容器名> | grep LogPath,确认路径结尾通常为 -json.log,表明使用的是 json-file 驱动。 - 编辑配置文件:打开 docker-compose.yml,在对应服务下添加 logging 段落,设置 max-size(单文件上限)和 max-file(保留文件数)。
- 重建容器:运行
docker-compose up -d,Compose 会检测到配置变更并重建容器。注意这会中断服务片刻。 - 清理旧日志:重建后旧日志文件可能仍保留在磁盘上,需手动查找 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/