容器日志轮转必须成对配置max-size和max-file,推荐全局设为"10m"和"5"并启用mode:"non-blocking",重启Docker后新容器自动生效,单容器超50MB即轮转删除最旧文件。

容器日志轮转的关键是配对设置 max-size 和 max-file,缺一不可。只设大小不设数量,或反之,都无法真正防止磁盘被撑爆。
全局配置:所有新容器自动生效(推荐)
编辑 /etc/docker/daemon.json,写入以下内容(文件不存在就新建):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5",
"mode": "non-blocking"
}
}
- max-size: "10m" —— 单个日志文件达到 10MB 就触发轮转,避免单文件过大难打开、传输慢
- max-file: "5" —— 最多保留 5 个文件(当前 + 4 个历史),总空间上限约 50MB/容器
- mode: "non-blocking" —— 日志写满时不卡应用线程,保障服务不因日志阻塞而超时或失败
保存后执行:
sudo systemctl daemon-reload && sudo systemctl restart docker
⚠️ 注意:该配置仅对重启 Docker 后新建的容器生效;已有运行中容器需重建(docker rm -f && docker run 或 docker-compose up -d)才应用新规则。
单容器覆盖配置:关键服务单独调优
对日志量大、稳定性要求高的服务(如支付、风控、实时计算),可在启动时覆盖全局策略:
用 docker run 启动:
docker run -d \
--log-driver json-file \
--log-opt max-size=5m \
--log-opt max-file=10 \
--log-opt mode=non-blocking \
--name payment-service \
registry/payment:v2.8
用 docker-compose.yml 声明:
services:
payment:
image: registry/payment:v2.8
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "10"
mode: "non-blocking"
验证与排查要点
配置生效后,可通过以下方式确认:
- 查容器日志路径:docker inspect <容器名> | grep LogPath
- 看实际日志文件大小:ls -lh /var/lib/docker/containers/<id>/<id>-json.log*
- 正常轮转后应看到类似文件:<id>-json.log、<id>-json.log.1、<id>-json.log.2…最多保留 max-file 个
若发现日志仍持续增长、无轮转,常见原因有:配置未重启 Docker、参数拼写错误(如写成 max_size)、使用了非 json-file 驱动(如 journald 或自定义驱动)但未适配对应选项。


















