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

Docker 容器日志在 /var/lib/docker/containers/<id>/<id>-json.log,不能直接 rm(文件被占用)——用 truncate -s 0 清空,或配置 log-opts 轮转从根本解决。本文给出清理与预防方案。

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

正确姿势:清空而不是删除——truncate -s 0 /var/lib/docker/containers/*/*-json.log。直接 rm 不会释放空间(进程仍持有文件句柄),容器还会报错。

清理现有日志

# 找到大日志文件
du -h /var/lib/docker/containers/*/*-json.log | sort -rh | head

# 清空(截断为零字节,安全)
sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/<容器ID>-json.log

# 一把全清
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'

根本解决:配置日志轮转

// /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

重启 Docker 生效——每个容器日志最多 10MB×3 个文件,自动轮转。

容器级单独配置

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

观测云对照

日志经 DataKit 采集上报观测云后,本地日志只需保留短期轮转副本——长期存储与检索在云端完成。

常见问题(FAQ)

Q:能直接删 json.log 吗? 不能——空间不释放(句柄占用)且 docker logs 会异常;truncate 或重启容器。

Q:K8s 环境呢? kubelet 有 containerLogMaxSize/containerLogMaxFiles 配置,CRI 运行时会自动轮转。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台