必须手动配置daemon.json设置全局日志轮转,推荐设"log-driver":"json-file"、"max-size":"50m"、"max-file":"2",重启docker后对新建容器生效,二者缺一不可,相乘得单容器日志硬上限100mb。

安装 Docker 后,它默认不设日志大小限制,必须手动配置才能防止容器日志把磁盘撑爆。关键不是“装的时候配”,而是“装完立刻配 daemon.json”,这是最直接、最通用的默认策略生效方式。
配置 /etc/docker/daemon.json 设置全局轮转
这是生产环境推荐的做法,能让所有后续新建的容器自动继承日志限制:
- 创建或编辑 /etc/docker/daemon.json 文件(若不存在就新建)
- 写入以下内容(以单个容器最多占 100MB 为例):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "2"
}
}
这表示:每个日志文件最大 50MB,最多保留 2 个(当前 + 1 个旧文件),合计上限 100MB。
保存后执行:sudo systemctl restart docker
注意:该配置只对重启后新创建的容器生效,已有容器需重建或手动覆盖。
为什么必须同时设置 max-size 和 max-file
Docker 的 json-file 或 local 驱动要求这两个参数缺一不可,单独设一个不会触发轮转:
- max-size 控制单个日志文件体积(支持单位:k、m、g,如 "10m")
- max-file 控制归档文件数量(比如设为 3,实际有 .log、.log.1、.log.2)
- 二者相乘就是该容器日志的硬性上限,超出后最老的日志会被自动删除
更轻量的选择:改用 local 驱动(推荐用于高负载场景)
local 驱动比 json-file 更省内存和 I/O,还支持压缩:
- 修改 daemon.json,把 log-driver 改为 "local"
- 可额外加
"compress": "true",生成 .log.zst 压缩文件 - 同样需要配 max-size 和 max-file,逻辑一致
示例:
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"compress": "true"
}
}
别忘了 dockerd 自身日志也要管
Docker 守护进程(dockerd)的日志不是容器日志,它默认由 systemd 的 journald 管理。如果发现 /var/log/docker.log 异常庞大,说明你可能手动重定向了 stdout —— 这种做法要避免。
- 优先让 journald 接管:查日志用
journalctl -u docker - 如确需落盘文件,必须配 logrotate,例如在 /etc/logrotate.d/docker-daemon 中定义轮转规则
- 否则 dockerd 日志也会悄悄吃掉几十 GB 磁盘空间











