docker日志大小限制仅对新建容器生效,无法实时作用于运行中容器;需通过docker run、docker-compose.yml或daemon.json配置max-size和max-file参数,并重建容器才能生效。

不能实时限制已有容器的日志大小。Docker 的 max-size 和 max-file 配置只在容器启动时生效,对正在运行的容器无效。
docker run 启动时设置日志大小限制
这是最直接、最可靠的方式,适用于新部署或重建容器的场景:
-
docker run命令中必须显式指定--log-driver json-file(即使它是默认驱动,也不能省略) -
--log-opt max-size=10m:单个日志文件达到 10MB 就触发轮转 -
--log-opt max-file=3:最多保留 3 个日志文件(含当前正在写的那个),超出后自动删除最旧的 - 示例命令:
docker run -d --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 nginx
docker-compose.yml 中配置 logging 选项
适合用 Compose 管理多服务的项目,配置清晰且可版本化:
- 必须写全
logging结构,driver不能省略 -
options下的max-size和max-file值必须是字符串,如"10m"、"3",数字不加引号会报错 - 修改后需
docker-compose down && docker-compose up -d重建容器才生效 - 示例片段:
services: app: image: myapp logging: driver: "json-file" options: max-size: "10m" max-file: "3"
/etc/docker/daemon.json 全局配置(只影响新建容器)
适用于集群统一治理,但要注意它不会“热更新”已运行容器:
- 编辑
/etc/docker/daemon.json,确保 JSON 格式合法(末尾无逗号、引号闭合) - 必须包含
"log-driver": "json-file",否则其他log-opts不生效 -
max-size推荐设为"10m"~"50m",太小会导致频繁轮转,影响 I/O;太大则起不到控盘作用 - 改完必须执行
sudo systemctl daemon-reload && sudo systemctl restart docker,否则配置不加载 - 验证是否生效:
docker inspect <container_id> --format='{{.HostConfig.LogConfig}}'</container_id>,输出应含MaxSize和MaxFile
最容易被忽略的一点:所有方式都只约束新容器。如果你发现某个老容器日志已经占了 20GB,唯一安全的做法是先备份关键日志,再 docker stop && docker rm 它,然后用带日志限制的命令重新 run 或 up。强行清空 /var/lib/docker/containers/<id>/<id>-json.log</id></id> 文件可能引发 Docker 守护进程异常或日志丢失。











