首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker 容器日志撑满磁盘:json-file 轮转配置与存量容器的处理

Docker 容器日志撑满磁盘:json-file 轮转配置与存量容器的处理

原创
作者头像
一只特立独行的兔先生
发布于 2026-10-30 00:08:29
发布于 2026-10-30 00:08:29
940
举报

背景

Docker 默认使用 json-file 日志驱动,容器标准输出会一直追加到宿主机上的 JSON 文件,默认没有大小限制。长期运行的服务只要日志量稍大,就可能把数据盘写满,进而导致其他服务写入失败。本文整理排查方法、轮转配置,以及一个容易被忽略的细节:全局配置只对新建容器生效。

一、确认是日志占满

日志文件位于 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log(默认数据目录下)。

代码语言:bash
复制
# 按大小列出各容器的日志文件
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail

# 查看某个容器的日志路径和驱动
docker inspect --format '{{.LogPath}} {{.HostConfig.LogConfig.Type}}' <容器名>

再配合 docker ps --no-trunc 或 docker inspect 把容器 ID 对应到具体服务。

二、配置全局轮转

编辑 /etc/docker/daemon.json:

代码语言:json
复制
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

含义:单个日志文件超过 100MB 就轮转,最多保留 3 个文件。数值需按业务日志量和磁盘大小调整。

修改后重启 Docker 服务:

代码语言:bash
复制
systemctl restart docker

注意:重启 dockerd 默认会停止容器,除非配置了 live-restore,上线前确认对业务的影响。

三、存量容器不会自动生效

这是最常见的误区:daemon.json 里的日志配置只在创建容器时写入容器的 HostConfig。已经存在的容器仍然沿用创建时的配置,重启 Docker 或容器都不会改变。可以用上面的 docker inspect 命令确认 LogConfig 里有没有 max-size。

处理方式是重新创建容器:

  1. docker rm 旧容器后用同样的参数重新 docker run。
  2. 使用 docker compose 时,修改后执行 docker compose up -d --force-recreate。

对单个容器也可以在创建时指定:

代码语言:bash
复制
docker run -d --log-opt max-size=50m --log-opt max-file=3 nginx

compose 写法:

代码语言:yaml
复制
services:
  app:
    image: nginx
    logging:
      driver: json-file
      options:
        max-size: "50m"
        max-file: "3"

四、紧急释放空间

磁盘已满、暂时不能重建容器时,可以先清空日志文件:

代码语言:bash
复制
truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

不要直接 rm 这个文件:容器进程仍持有句柄,空间不会释放,df 与 du 还会对不上。清空会丢失已有日志,操作前确认是否需要保留。

五、更长期的做法

  • 业务日志写文件并用 logrotate 管理,或统一采集到日志服务,容器内只保留少量标准输出。
  • 使用 local 日志驱动:它默认带轮转并采用更紧凑的存储格式,但 docker logs 之外的工具无法直接读取其文件格式,选用前确认下游采集方式。
  • 监控磁盘使用率和 /var/lib/docker 的增长趋势,在写满之前告警。

小结

  1. 先用 du 与 docker inspect 确认是 json-file 日志过大。
  2. daemon.json 配 max-size 与 max-file,但只对新建容器生效。
  3. 存量容器需要重建;紧急情况下用 truncate 清空而非 rm。
  4. 长期通过日志采集和磁盘监控兜底。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 背景
  • 一、确认是日志占满
  • 二、配置全局轮转
  • 三、存量容器不会自动生效
  • 四、紧急释放空间
  • 五、更长期的做法
  • 小结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档