最有效解法是直接限制容器日志输出规模。需清空日志文件而非删除,推荐全局配置daemon.json设置max-size和max-file,支持按服务单独控制,并建立磁盘监控与集中式日志系统闭环管理。

直接限制容器日志输出规模,是最有效、最可控的解法。临时日志写满磁盘,本质是 json-file 驱动未设上限,导致 stdout/stderr 持续追加到 /var/lib/docker/containers/<id>/<id>-json.log</id></id>,文件无限膨胀。
快速释放已占空间(应急)
不能用 rm 删除日志文件——Docker 进程仍持有文件句柄,磁盘不会释放。正确做法是清空内容:
- 查最大日志:
du -sh /var/lib/docker/containers/*/*-json.log | sort -hr | head -5 - 清空单个日志:
truncate -s 0 /var/lib/docker/containers/abc123/abc123-json.log - 批量清空(谨慎执行):
find /var/lib/docker/containers/ -name '*-json.log' -exec truncate -s 0 {} \;
全局统一限制(推荐首选)
修改 Docker 守护进程配置,让所有新建容器自动继承日志策略:
- 编辑
/etc/docker/daemon.json,加入:
-
max-size控制单个日志文件上限(如100m),超出即触发轮转 -
max-file控制最多保留几个历史日志(如3),旧文件自动删除 - 保存后执行:
systemctl restart docker(仅对新创建容器生效)
按服务单独控制(灵活适配)
对日志量差异大的微服务,可在启动时精细化配置:
- Docker CLI:
docker run --log-driver=json-file --log-opt max-size=50m --log-opt max-file=2 ... - Docker Compose:
logging段中声明
- 高频率调试服务可设小值(如
20m/2),核心服务可略宽松(如200m/3) - 避免在生产环境使用
docker logs -f长挂起,尤其当日志量大时易本地缓存激增
长期预防与监控建议
光靠限制还不够,需建立闭环管理:
- 将
/var/lib/docker所在分区加入磁盘监控(如 Prometheus + node_exporter) - 定期统计日志总占用:
du -sh /var/lib/docker/containers/*/*-json.log | awk '{sum += $1} END {print sum/1024/1024 " MB"}' - 对频繁报错、循环打日志的服务,及时检查应用层逻辑,而非只压日志大小
- 生产环境建议逐步接入集中式日志系统(如 Loki + Grafana 或 ELK),脱离本地 JSON 文件依赖











