目录
🚨 问题背景
近期在维护某生产环境时,发现磁盘空间被迅速耗尽。检查后发现,某个 Docker 容器的日志文件:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
居然高达 2.6TB!
容器为:
CONTAINER ID IMAGE NAMES
2e5f90f019ee milvusdb/milvus:v2.5.6 milvus-standalone
原来是这个 milvus-standalone
容器不断向标准输出刷日志,导致 json 格式日志文件无限增长。下面是排查与解决全过程。
🧭 步骤一:快速定位哪个容器导致日志暴涨
docker ps -a | grep 2e5f90
或者查看日志路径对应的容器:
docker inspect 2e5f90f019ee --format '{{.Name}} - {{.LogPath}}'
确认该容器正对应 2.6TB 的日志文件。
🔍 步骤二:查看日志内容
不要直接 cat
,否则会把终端撑爆。使用 tail
查看最后的内容:
tail -n 100 /var/lib/docker/containers/2e5f90f019ee*/2e5f90f019ee*-json.log
通常可见反复错误或调试信息刷屏,比如:
-
连接失败
-
数据库查询频繁
-
监控服务打点日志等
✂️ 步骤三:立即清空日志(释放磁盘空间)
这是临时措施,不会重启容器:
> /var/lib/docker/containers/2e5f90f019ee*/2e5f90f019ee*-json.log
注意:这是将文件内容置空,文件仍存在但大小变为 0。
🔧 步骤四:配置日志轮转,防止再次暴涨
修改你的 docker-compose.yml
或运行参数,加入日志限制配置:
services:
milvus-standalone:
image: milvusdb/milvus:v2.5.6
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "5"
说明:
-
每个日志文件最大 100MB
-
最多保留 5 个轮转文件
-
日志总量最多 500MB
🔁 步骤五:重启容器使配置生效
docker-compose down
docker-compose up -d
或手动重启指定容器:
docker restart milvus-standalone
✅ 最佳实践建议
操作 | 推荐 |
---|---|
生产环境日志 | 启用 max-size + max-file |
更高级管理 | 日志集中管理(ELK / Loki / FluentBit) |
调试级别 | 避免无脑开启 debug 模式 |
定期巡检 | du -sh /var/lib/docker/containers/*/*.log |
📌 总结
Docker 的 json-file
日志驱动默认无大小限制,在长时间运行服务时非常危险。我们可以:
-
临时清空日志释放空间
-
长期设置轮转策略限制日志增长
-
结合日志监控工具提升运维能力
避免磁盘“爆仓”,从这一刻开始优化你的 Docker 容器日志策略!