Docker 是快速部署和运行应用的绝佳工具。但我们往往会忽略其运行过程中一个关键要素——日志文件。
为什么这么说?最近我的服务器磁盘空间告急,排查后发现某个 Docker 容器在一年内竟生成了 14GB 的日志文件。为避免你重蹈覆辙,本文将手把手教你如何快速检查 Docker 日志大小、清理日志文件,并设置预防机制。
重启 vs 重建容器:关键区别
在深入正题前,需要澄清一个关键点:Docker 容器的无状态特性(译者注:即容器本身不保存持久化数据)意味着日志会在容器重建时被清除。但很多人忽略了一个重要细节——重启(restart)与重建(recreate)的区别。
服务器重启或执行 systemctl restart docker
时,Docker 守护进程会优雅停止并重新启动容器,此时日志文件仍然保留。只有删除并重建容器才会重置日志,单纯的停止/启动操作不会影响现有日志。
定位日志膨胀元凶
查看日志文件大小
默认情况下,Docker 日志存储在宿主机的以下路径(假设未修改默认数据目录):
|
|
使用 find 命令快速定位日志文件大小:
|
|
容器 ID 与名称映射
通过容器 ID 获取对应容器名称:
|
|
验证日志路径:
|
|
日志清理实战
单文件清理
使用 truncate 命令清空指定日志:
|
|
全量清理(慎用!)
一键清空所有容器日志:
|
|
治本之道:日志限流
全局配置日志轮转
修改 Docker 守护进程配置 /etc/docker/daemon.json
:
|
|
应用配置并重启 Docker:
|
|
重要提示:该配置仅对新创建容器生效,已有容器需重建。
容器重建操作指南
- 普通 Docker 容器:
|
|
- Docker Compose 项目:
|
|
验证配置生效:
|
|
最佳实践总结
- 定期巡检:将日志检查加入日常维护流程
- 分级管控:对关键业务容器单独设置更宽松的日志策略
- 日志聚合:考虑使用 ELK 等方案进行集中式日志管理(译者注:这是对原文建议的延伸)
- 容器化思维:避免在容器内直接写日志文件,坚持 stdout/stderr 输出