docker日志轮转需在daemon.json中配置json-file驱动及max-size、max-file参数,重启docker服务后生效,新容器自动启用轮转,单个日志≤10mb且最多保留3个文件(含当前)。
在 daemon.json 中配置日志备份轮转,核心是设置 docker 守护进程的默认日志驱动和选项,让所有容器(除非单独覆盖)自动启用日志轮转。这不涉及单个容器的日志配置,而是全局默认行为。
配置默认日志驱动为 json-file 并启用轮转
Docker 默认使用 json-file 驱动,但默认不开启轮转。需在 /etc/docker/daemon.json 中显式指定驱动及轮转参数:
注意:修改后必须重启 Docker 服务才生效(sudo systemctl restart docker)
-
"log-driver": "json-file"—— 明确设为 json-file(虽是默认值,但轮转参数必须在此驱动下生效) -
"log-opts"—— 包含具体轮转规则:-
"max-size": "10m"—— 单个日志文件最大大小(支持k、m、g) -
"max-file": "3"—— 最多保留几个历史日志文件(含当前正在写的那个) - 可选:
"labels"或"env"限制哪些容器受此影响(一般不需要)
-
完整的 daemon.json 示例
以下是最小可用配置,实现“单个日志 ≤10MB,最多存 3 个文件”:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
保存后执行 sudo systemctl restart docker,之后新建的容器就会自动按此规则轮转日志。已有容器需重建才生效。
验证是否生效
启动一个新容器后,检查其日志路径下的文件数量和大小:
- 日志路径通常为:
/var/lib/docker/containers/<container-id>/<container-id>-json.log</container-id></container-id> - 用
ls -lh /var/lib/docker/containers/*/查看是否有-json.log.1、.2等备份文件 - 持续写日志(如
docker run alpine sh -c "yes | head -n 100000"),观察是否触发切割
常见误区提醒
- 不是所有驱动都支持轮转:
syslog、journald、fluentd等由后端系统管理,json-file和local才支持max-size/max-file -
max-file: 3表示最多保留 3 个文件:当前.log+ 2 个历史(.log.1,.log.2),不是总共 3 个备份 - 该配置是全局默认值,单个容器仍可通过
docker run --log-opt max-size=5m ...覆盖











