Docker 磁盘被吃光?三步搞定容器日志轮转
【摘要】 做运维最心惊的瞬间,莫过于凌晨收到磁盘告警:/var/lib/docker 一夜之间涨了几十 G,服务随时可能挂。凶手十有八九是容器日志——默认 json-file 驱动从不删旧日志,单个容器轻松写出几十 GB。第一步:定位元凶du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head -5一行命令就能看到哪个容器的日志文...
做运维最心惊的瞬间,莫过于凌晨收到磁盘告警:/var/lib/docker 一夜之间涨了几十 G,服务随时可能挂。凶手十有八九是容器日志——默认 json-file 驱动从不删旧日志,单个容器轻松写出几十 GB。
第一步:定位元凶
du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head -5
一行命令就能看到哪个容器的日志文件最大,八成是某个爱打 info 日志的业务容器。
第二步:给新容器加上日志轮转
docker-compose.yml 里直接声明:
services:
app:
image: my-app:latest
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
这样单个日志文件 50MB、最多保留 5 个,单个容器日志上限 250MB。docker run 同理,加两个 --log-opt 参数即可。
第三步:存量容器怎么办
已经跑起来的容器改不了日志配置,有两条路:
- 全局兜底:在 /etc/docker/daemon.json 里加 log-opts 的 max-size、max-file,重启 Docker 生效(会重启所有容器,挑业务低峰做)。
- 应急截断:echo 追加不可取,直接清空文件内容:
: > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
注意不要 rm 删文件,否则文件句柄还在、空间不释放。
最后别忘了定期清理悬空镜像和停止的容器:
docker system prune -af --volumes
结论:日志轮转是容器上线的必配项,别等磁盘报警了才动手。花五分钟配一次,省下的是凌晨三点的抢修。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)