容器日志排查与管理经验
·
磁盘容量杀手!docker容器挂载到本地文件日志排查。
docker容器日志排查与管理经验文档
1. 问题背景
在使用 RagFlow 系统时,发现服务器 /home 分区磁盘使用量异常增高,需要排查大文件并管理容器日志,避免日志无限增长导致磁盘占满。
2. 定位大文件及目录
- 查看
/home下各目录占用情况:
sudo du -h --max-depth=1 /home | sort -hr | head -20
输出示例:
2.9T /home
1.1T /home/docker-data
605G /home/xugq
...
分析:
/home/docker-data占用 1.1T,显著高于其他目录,需要进一步排查。
- 排查
/home/docker-data下大目录:
sudo du -h --max-depth=1 /home/docker-data | sort -hr | head -10
输出示例:
925G /home/docker-data/containers
104G /home/docker-data/overlay2
24G /home/docker-data/volumes
...
分析:
/home/docker-data/containers占用 925G,是主要的大文件来源。
- 进入大容器目录,查看具体容器占用:
sudo du -h --max-depth=1 /home/docker-data/containers | sort -hr | head -10
输出示例:
925G /home/docker-data/containers/bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af
...
分析:
- 该容器日志文件占用几乎全部空间。
- 定位大文件:
sudo find /home/docker-data/containers/bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af -type f -exec du -h {} + | sort -hr | head -20
输出示例:
925G .../bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af-json.log
8.0K .../config.v2.json
...
结论:
bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af-json.log是主要的大文件,占用 925G。
3. 查看日志内容
sudo tail -n 100 /home/docker-data/containers/.../bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af-json.log
输出显示:
- 日志中大量 Redis 连接失败信息:
valkey.exceptions.ConnectionError: Error -3 connecting to redis:6379. Temporary failure in name resolution
结论:
- 日志快速增长的原因是容器内部尝试连接未启动的 Redis 服务。
4. 清理日志文件
- 先截断大日志文件,释放空间:
sudo truncate -s 0 /home/docker-data/containers/.../bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af-json.log
- 验证文件大小已清空:
ls -lh /home/docker-data/containers/.../*.log
5. 配置日志滚动更新
为了防止日志文件再次无限增长,使用 logrotate 对 Docker 容器日志进行管理。
- 创建 logrotate 配置文件
/etc/logrotate.d/ragflowplus-container:
/home/docker-data/containers/bfcce787f0d0a1694c267fb897572a2fc1de6824f1f5221fd3f63309fa9a67af/*.log {
size 100M
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:
size 100M:日志达到 100M 时轮转。rotate 7:保留最近 7 个压缩日志。compress:轮转后的日志压缩。copytruncate:在轮转时截断原日志,避免 Docker 持续写入失败。
- 测试配置(调试模式):
sudo logrotate -d /etc/logrotate.d/ragflowplus-container
输出显示:
- 已识别日志文件,执行轮转操作(拷贝并截断)。
- 注意:
-d模式仅调试,不真正执行轮转。
- 强制执行轮转(首次清理):
sudo logrotate -f /etc/logrotate.d/ragflowplus-container
验证:
ls -lh /home/docker-data/containers/.../
- 看到日志文件被截断,新生成
.1.gz等压缩轮转文件。
6. 总结与经验
-
快速定位大文件方法:
du -h --max-depth=1 | sort -hr | head -n 20find ... -type f -exec du -h {} + | sort -hr | head -20
-
排查日志文件内容:
tail -n 100查看最后日志。- 日志快速增长可能是服务错误或循环报错。
-
清理大日志文件:
truncate -s 0截断日志,快速释放空间。
-
配置滚动更新日志防止重复问题:
- 使用
logrotate,配置size、rotate、compress、copytruncate。 - 可通过调试模式检查配置:
logrotate -d。 - 强制执行首次轮转:
logrotate -f。
- 使用
-
注意事项:
- Docker 默认容器日志可能无限增长,特别是服务报错频繁时。
- 定期检查大文件和日志轮转状态。
- 对多容器系统,可针对每个容器单独配置 logrotate。
更多推荐



所有评论(0)