max-size仅对json-file驱动生效,需配合max-file使用,值必须为带单位字符串如"10m",且修改后需重启服务或重载docker守护进程才能生效。

max-size 必须配合 json-file 驱动才生效
max-size 是 json-file 日志驱动的专属参数,其他驱动(如 syslog、fluentd、none)完全忽略它。如果你在 daemon.json 或 docker run 中设置了 max-size 但日志仍无限增长,第一反应应该是检查当前驱动是否真的是 json-file:
- 查容器实际驱动:
docker inspect <container_id> | grep log-driver</container_id> - 查全局默认驱动:
docker info | grep "Logging Driver" - 若输出是
syslog或journald,max-size再怎么配都无效
max-size 的单位和合法写法容易出错
值必须带单位后缀,且只支持 k(KB)、m(MB)、g(GB),不接受大小写混用或空格。常见错误包括:
-
"max-size": "10M"→ 大写M会被 Docker 忽略,退回到无限制 -
"max-size": "10 mb"→ 含空格,解析失败,整个log-opts被丢弃 -
"max-size": "10240"→ 无单位,Docker 认为是字节,相当于 10KB,远小于预期 - 推荐写法只有三种:
"10m"、"100k"、"1g"
max-size 单独配置没用,必须和 max-file 搭配
max-size 控制“单个文件多大”,但不控制“能存几个”。如果只设 max-size="10m" 而 max-file 保持默认值 1,Docker 会在日志满 10MB 后覆盖重写同一个文件 —— 看似轮转,实则丢失历史。
- 正确组合示例:
"max-size":"10m","max-file":"3"→ 最多保留 3 个 10MB 文件,总上限约 30MB - 若设
max-file":"10"但max-size":"100m",单个文件可能涨到 100MB,再轮出 9 个旧文件,总占用接近 1GB - 生产环境建议从
"10m"+"3"起步,再根据日志密度调整;高频报错服务可收紧到"5m"
docker-compose 和 daemon.json 中的配置优先级差异
两者都能设 max-size,但行为不同:
- 写在
/etc/docker/daemon.json中是全局默认,所有新容器自动继承(除非被覆盖) - 写在
docker-compose.yml的logging.options下,只影响该 service,且会覆盖 daemon 级配置 - 用
docker run --log-opt max-size=5m启动的容器,优先级最高,连 compose 配置都会被绕过 - 注意:修改
daemon.json后必须执行sudo systemctl reload docker(不是 restart),否则不生效
max-size 不是开关,是轮转策略里的一环;单位写错、驱动不匹配、缺 max-file,任一环节断掉,日志就照常爆盘。











