直接在 docker-compose.yml 中配置 json-file 日志驱动的 max-size 和 max-file 参数即可实现容器日志自动分卷,无需额外工具;该机制仅作用于 stdout/stderr,不处理应用写入文件的日志。

直接在 docker-compose.yml 中配置日志驱动和轮转参数,就能实现容器内应用日志的自动分卷(即按大小切割、保留指定数量),无需额外脚本或外部工具。
用 json-file 驱动开启自动分卷
这是最常用、开箱即用的方式。Docker 的 json-file 驱动原生支持基于大小的日志分卷,通过两个关键参数控制:
-
max-size:单个日志文件达到该大小后自动新建文件(如
"10m"表示 10MB) -
max-file:最多保留几个历史日志文件(如
"5"表示当前 + 最近 4 个,超出则删除最旧的)
配置示例:
services:
api:
image: myapp:latest
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
为所有服务统一设置分卷策略
避免重复写配置,可用 YAML 锚点定义全局默认日志策略:
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
services:
web:
image: nginx
logging: *default-logging
db:
image: postgres
logging: *default-logging
这样既保持简洁,又确保一致性,新加入的服务只需引用即可。
验证分卷是否生效
部署后,可通过以下方式确认配置已加载:
- 运行
docker compose up -d启动服务 - 查容器 ID:
docker ps --filter name=api -q - 检查日志配置:
docker inspect --format '{{.HostConfig.LogConfig}}' [容器ID]
输出中应明确包含 "Type":"json-file" 及对应的 MaxSize 和 MaxFile 值。
注意事项与常见问题
分卷只作用于 Docker 捕获的标准输出(stdout/stderr),不处理应用自行写入文件的日志(如 Spring Boot 的 logs/app.log)。这类日志需应用层配置(如 Logback 的 RollingFileAppender)或挂载宿主机目录 + 外部 logrotate 管理。
另外,json-file 分卷是追加写+滚动重命名机制,不会中断日志流,也无需重启容器 —— 日志写入完全透明。


















