Docker 磁盘被吃光?三步搞定容器日志轮转

举报
yd_275127495 发表于 2026/10/24 07:37:12 2026/10/24
【摘要】 做运维最心惊的瞬间,莫过于凌晨收到磁盘告警:/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 参数即可。

第三步:存量容器怎么办

已经跑起来的容器改不了日志配置,有两条路:

  1. 全局兜底:在 /etc/docker/daemon.json 里加 log-opts 的 max-size、max-file,重启 Docker 生效(会重启所有容器,挑业务低峰做)。
  2. 应急截断:echo 追加不可取,直接清空文件内容:
: > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

注意不要 rm 删文件,否则文件句柄还在、空间不释放。

最后别忘了定期清理悬空镜像和停止的容器:

docker system prune -af --volumes

结论:日志轮转是容器上线的必配项,别等磁盘报警了才动手。花五分钟配一次,省下的是凌晨三点的抢修。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。