核心办法是用 max-size 和 max-file 配合控制日志文件大小与数量,从源头阻止日志无节制增长;需先定位问题容器、清空日志内容而非删除、再配置全局或单容器日志轮转策略。
核心办法是用 max-size 和 max-file 配合控制日志文件大小与数量,从源头阻止日志无节制增长。单纯清日志只是临时止血,配置日志轮转才是治本之策。
确认日志是否正在撑爆磁盘
先快速定位问题容器:
- 运行
du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head -5查看最大的几个日志文件 - 用
docker inspect --format='{{.LogPath}}' <container_id></container_id>确认具体路径 - 检查
df -h,重点关注/var/lib/docker所在分区使用率
立即释放已占空间(应急操作)
容器仍在运行时,不能直接 rm 日志文件——Linux 文件句柄未关闭,磁盘空间不会释放。正确做法是清空内容:
- 执行
cat /dev/null > /var/lib/docker/containers/<id>/<id>-json.log</id></id> - 或批量清理:用脚本遍历所有
*-json.log并cat /dev/null > $log - 清理后建议重启对应容器,确保日志写入新文件(尤其旧日志被清空但句柄仍存在时)
配置全局日志限制(推荐长期方案)
修改 /etc/docker/daemon.json,加入以下配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
-
max-size控制单个日志文件上限(如"50m"),达到即触发轮转 -
max-file指定最多保留几个历史日志文件(如"3"),超出后自动删除最旧的 - 改完必须执行
systemctl daemon-reload && systemctl restart docker - 注意:该配置只对新建容器生效,已有容器需重建才启用
按容器单独设置(灵活补充)
对日志量特别大或特别小的容器,可在启动时覆盖全局配置:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=5 ...- 适用于调试环境(设宽松)或边缘设备(设更严,如
max-size=5m max-file=2) - 也可用于临时排查:加
--log-opt labels=env,service方便后续筛选











