|
|
Docker容器日志爆满的运维清理与轮转方案
问题分析
当Docker容器运行时间较长或日志输出频繁时,容器日志文件可能会迅速增长,导致磁盘空间占满,影响系统正常运行。
解决方案
1. 临时清理日志
直接清理日志文件- # 查找容器日志路径(通常在/var/lib/docker/containers/下)
- docker inspect <容器ID或名称> | grep "LogPath"
- # 或者直接查看(需要root权限)
- sudo ls -lh /var/lib/docker/containers/*/*-json.log
- # 清理特定容器日志
- truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
- # 或者
- echo "" > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
复制代码
重启容器(会重新创建日志文件)
2. 配置日志轮转
方法一:通过docker run参数配置- # 限制日志文件大小为10M,保留3个备份
- docker run -d --log-opt max-size=10m --log-opt max-file=3 <其他参数> <镜像名称>
复制代码
方法二:修改daemon.json全局配置- {
- "log-driver": "json-file",
- "log-opts": {
- "max-size": "10m",
- "max-file": "3"
- }
- }
复制代码 修改后重启Docker服务:- sudo systemctl restart docker
复制代码
3. 使用logrotate进行轮转
创建logrotate配置文件- sudo vim /etc/logrotate.d/docker-containers
复制代码
配置内容示例- /var/lib/docker/containers/*/*.log {
- rotate 7
- daily
- compress
- size=10M
- missingok
- copytruncate
- notifempty
- nocreate
- }
复制代码
4. 长期解决方案
集中式日志收集
- 使用ELK (Elasticsearch, Logstash, Kibana) 栈
- 使用Fluentd或Fluent Bit
- 使用Graylog
容器内日志管理
- 应用程序直接写入stdout/stderr(Docker默认收集方式)
- 在应用层面实现日志轮转
自动化监控与告警
- # 定期检查日志目录大小
- du -h /var/lib/docker/containers/
复制代码
- 设置告警:
- 使用Prometheus + Alertmanager监控磁盘使用率
- 设置当/var/lib/docker分区使用超过80%时触发告警
最佳实践
- 在生产环境中始终配置日志轮转策略
- 考虑使用syslog或journald等替代日志驱动
- 对于关键服务,实现集中式日志管理
- 定期审查容器日志配置,确保符合业务需求
通过以上方法,可以有效管理Docker容器的日志,防止日志文件占满磁盘空间。 |
|