Docker 日志轮转不生效,怎样检查 json-file 配置?
Docker 的 json-file 日志轮转需要同时核对日志驱动、max-size 和 max-file。修改 daemon 默认配置后,已有容器仍保留创建时的选项,需要按部署流程重新创建,再用 inspect 验证实际配置。
适用版本与前提
本文面向 Linux Docker Engine 28/29 系列和 Docker Compose v2,依据发布时的 Docker 官方文档整理,未在目标主机实测。先记录服务端和 Compose 版本,并确认所连接的 Docker 主机。本文仅讨论容器标准输出、标准错误经 json-file 保存的日志,应用自行写入挂载目录的文件需要由应用另行配置保留策略。
docker version
docker compose version
docker context show
docker info --format '{{.LoggingDriver}}'命令依次用于核对客户端与服务端版本、Compose 版本、连接入口和 daemon 默认日志驱动。远程 context 下,主机磁盘检查应针对服务端。操作需要已有的 Docker 管理授权。
第一步,检查目标容器创建时的选项
docker inspect --format '{{json .HostConfig.LogConfig}}' CONTAINER将 CONTAINER 替换为真实容器名或 ID,检查 Type 和 Config。daemon 默认值不能代替容器实际配置。修改默认驱动或选项只影响后来创建的容器,已有容器需重新创建才能使用目标配置,见 Docker 日志驱动配置说明。
若 Type 为 local、journald 或远程驱动,应按照对应驱动文档排查。若 Config 里缺少轮转选项,再回到创建容器的 Compose 文件或部署模板核对,避免只修改一份未被部署使用的文件。
第二步,在服务定义中明确设置轮转
在已有 Compose 服务下加入 logging。下面仅为配置片段,app 应替换为实际服务名,并保留该服务原有镜像、挂载、网络等配置。
services:
app:
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"logging.driver 与 logging.options 的结构见 Compose 服务 logging 定义。20m 和 5 是示例值,应按日志速率、可用容量与故障取证窗口选择。多个副本需要分别纳入容量预算,轮转文件数不能换算成固定保留天数。
max-size 控制单个日志文件的轮转阈值,max-file 控制保留文件数量,后者只有在 max-size 也设置时才有效。json-file 默认 max-size 为无限制。参数定义见 JSON File 驱动官方说明。
第三步,校验部署输入并安排重新创建
docker compose config在实际部署目录使用相同的 -f 文件、环境变量和项目参数检查最终配置,确认 logging 位于目标服务下。输出可能包含环境变量内容,分享前先脱敏。相关输入核查可参考本站 Docker Compose 变量与合并配置检查。
- 保留当前配置、容器 ID、日志采集方式和必要的历史日志。
- 确认持久数据位于预期卷或绑定目录,并准备服务验证与回退方案。
- 在允许服务替换的窗口,按原部署流程重新创建目标服务。
- 核对新容器 ID 和实际日志选项,再验证业务请求及日志采集。
如果采用 daemon.json 设置默认值,官方要求 log-opts 值使用字符串,并说明重新启动 daemon 后仅新创建容器使用新设置。daemon 变更涉及整台 Docker 主机,应单独评估窗口,参阅 默认日志配置的生效范围。
验证轮转与常见问题
docker inspect --format '{{json .HostConfig.LogConfig}}' CONTAINER
docker logs --since 10m --tail 100 --timestamps CONTAINERinspect 应显示期望的驱动和两项选项。logs 用于检查最近十分钟内末尾最多一百行日志及时间戳,参数含义见 docker logs 官方文档。在隔离测试环境让测试容器产生足够日志,观察保留窗口与磁盘趋势;配置字段正确只是验证的一部分,业务日志能读取和采集也需要确认。
重启原容器为什么没有变化?
原容器仍是创建时的配置,应检查是否真正生成了新容器,以及部署所用文件是否包含目标设置。不要仅凭一次 restart 成功就认定轮转选项已更新。
可以直接清空 Docker 管理的日志文件吗?
官方说明这些文件应由 Docker daemon 独占访问,外部工具修改可能干扰日志系统,因此应使用驱动支持的配置和部署流程。轮转会淘汰旧日志,需要长期保留时先确认集中采集方案,见 json-file 文件访问与轮转边界。
如果尚未确认磁盘增长来自日志,先阅读本站 Docker 镜像、容器、数据卷与日志占用排查。本文没有执行生产重建,也未提供实测容量或效果数据。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭