如何正确清理 Docker 容器的日志?

Docker 容器日志由日志驱动管理,不应直接 truncate 或 rm 内部文件。配置 log-opts 轮转,并在保留必要日志与持久数据后有计划地重建已有容器。本文给出清理与预防方案。

最佳实践
如何正确清理 Docker 容器的日志?封面

正确姿势:通过 Docker 支持的日志驱动和轮转配置管理日志。 json-file 文件由 Docker 独占管理,不应把直接 truncate 或 rm 内部文件作为安全清理方法。

清理现有日志

先用 docker inspect --format '{{json .HostConfig.LogConfig}}' 容器名 确认日志驱动,核对采集与保留要求。需要释放已有容器的本地日志时,应先保留必要记录、确认数据位于持久卷,再按原运行参数有计划地重建容器并移除旧容器;不要对所有内部日志文件做通配符截断。

根本解决:配置日志轮转

/etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

重启 Docker 后,新的默认配置仅应用于随后创建的容器,已有容器需要重建。10m 和 3 是轮转策略,不是精确的磁盘硬配额;单条超大记录等会影响实际占用。

容器级单独配置

docker run --log-opt max-size=10m --log-opt max-file=3 myapp

缩短本地日志保留前,先核对采集端是否跟上写入速度,并确认远端保留期限。在观测云侧按 DataKit 日志采集指南检查采集配置,用轮转前后的测试记录验证没有漏采,再决定本地副本需要保留多久。

常见问题(FAQ)

Q:能直接删 json.log 吗? 不应直接修改 Docker 管理的文件;若文件仍被持有,删除目录项也不立即释放空间。简单重启容器不等于清空日志。

Q:K8s 环境呢? kubelet 有 containerLogMaxSize/containerLogMaxFiles 配置,由 kubelet 管理容器日志轮转,并与 CRI 运行时协作。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台