首页/云/云与容器速查/容器日志驱动与大小限制
容器与 Docker106 条

容器日志驱动与大小限制

json-file 驱动默认不限制日志体积,长期运行的服务会把磁盘写满:在 daemon.json 或单容器 --log-opt max-size/max-file 设置轮转上限。

云与容器速查云更新于 2026-10-13

容器日志驱动与大小限制是什么

Docker 默认使用 json-file 日志驱动,且默认不做体积限制:每个容器的日志写在 /var/lib/docker/containers/<容器ID>/ 目录下并持续增长,长期运行的服务最终会把宿主磁盘写满,表现是所有容器一起异常。控制方式有两种:单容器用 --log-opt max-size 与 max-file 限制单文件大小与保留个数;全局在 daemon.json 的 log-opts 里配置默认值,只对之后新建的容器生效。

基本信息

默认驱动json-file,docker logs 可读,文件位于 /var/lib/docker/containers/<id>/
单容器限制--log-opt max-size=10m --log-opt max-file=3
全局默认daemon.json 的 log-driver 与 log-opts,仅新建容器生效
驱动差异syslog、journald 等驱动下 docker logs 不可用,日志被转发到外部系统
排查命令du 按大小排序查看各容器日志占用,快速定位日志大户

典型使用场景

  • 生产宿主机统一配置日志上限,避免单个刷日志的服务写满磁盘拖垮全部容器
  • 磁盘告警排查时定位日志大户,先止血再定位应用侧刷日志的原因
  • 日志已接入集中式系统(ELK、Loki 等)后,本地只保留少量缓冲用于现场排查
  • 合规要求日志外发留存、本地不长期保存的场景,靠轮转实现自动清理
  • Kubernetes 场景下交由容器运行时或日志采集器管理,避免同时两套轮转冲突

配置与排查示例

配置与排查示例
docker run -d --log-opt max-size=10m --log-opt max-file=3 --name web nginx:1.27
docker inspect web -f '{{.HostConfig.LogConfig}}'   # 确认当前生效的日志配置
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail   # 找出日志占用最大的容器
# 运行中容器的日志过大时可截断:truncate -s 0 <日志文件路径>
# 不要直接 rm 运行中容器的日志文件:文件句柄仍被占用,磁盘空间不会释放

常用 log-opt 参数

参数含义取值建议
max-size单个日志文件大小上限10m 起步,按应用日志量调整
max-file保留的日志文件个数3-5,兼顾现场排查与磁盘占用
labels在日志中附加容器标签集中采集时便于按业务区分
tagsyslog 类驱动使用的标识配合集中式日志系统的分类规则
修改 daemon.json 的全局日志配置需要重载 Docker 守护进程,会影响宿主机上所有容器;变更前确认业务窗口,并注意该配置只对新建容器生效。
max-size 触发的轮转是删除最旧的日志文件,历史不再保留;依赖本地日志做审计或追责的场景必须同时开启日志外发,否则轮转发生后证据就丢了。

易错点

  • 日志把磁盘写满导致 Docker 守护进程自身异常:先截断日志止血,再补上大小上限配置
  • 改用 journald 等驱动后仍用 docker logs 查日志:命令直接不可用,需要从 journal 或外部系统查看
  • 只改了 daemon.json 就以为存量容器也受限:配置仅对新建容器生效,旧容器需要重建
  • 直接删除运行中容器的日志文件:句柄仍被占用,磁盘空间不会释放,要用 truncate 截断

数据来源与参考

  • Docker Docs:Logging drivers
  • Docker Docs:json-file driver

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌