Skip to main content

安全清理容器的日志文件/var/lib/docker/containers

从你的 du -h -d1 输出可以看出:

  • 总共 82GB 的空间被 /var/lib/docker/containers 占用。
  • 其中一个容器目录(ID 为 b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6)就占用了 82GB,几乎全部空间。

这极大概率是该容器的 日志文件(b731e62...-json.log)过大导致的。


🔍 第一步:确认是日志文件

进入该目录,查看具体文件:

ls -lh /var/lib/docker/containers/b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6/

你应该会看到类似:

-rw-r----- 1 root root 82G ... b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6-json.log

✅ 安全清理方案(根据容器状态选择)

🟢 情况一:该容器仍在运行,但你不能停它

比如是生产服务,需要保持运行。

使用 truncate 清空日志而不中断容器:

truncate -s 0 /var/lib/docker/containers/b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6/b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6-json.log

✅ 空间立即释放,容器继续正常运行。


🔴 情况二:该容器已停止或不再需要

比如是测试容器、僵尸容器。

彻底删除容器(推荐):

  1. 先查容器名或确认状态:

    docker ps -a | grep b731e62
    
  2. 如果确认无用,删除它:

    docker rm b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6
    

    如果还在运行,先 docker stop <id> 再删。

✅ 删除后,整个目录(包括 82GB 日志)会自动被 Docker 清理。


🛡️ 长期预防:配置日志轮转

避免未来再次出现 82GB 日志!

编辑 /etc/docker/daemon.json(若不存在则创建):

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

然后重启 Docker:

systemctl restart docker

⚠️ 注意:此设置仅对新启动的容器生效。已有容器需重建(docker-compose up -ddocker run 重新创建)才能应用。


🔎 补充建议

  • 查看这个容器是什么:

    docker inspect b731e62e9a85 --format='{{.Name}} {{.Config.Image}}'
    

    看是否是关键服务(如数据库、日志收集器等)。有些应用(如未配置的日志服务、调试容器)会疯狂输出日志。

  • 如果是 fluentdlogstashpromtail 或自研程序,检查其日志级别(是否误设为 DEBUG)。


✅ 总结操作(推荐顺序)

  1. 先清空日志释放空间(无论容器是否运行):

    truncate -s 0 /var/lib/docker/containers/b731e62e9a85206148e66cceb202722362f04f444fc9c4aa205866aaf373abe6/*-json.log
    
  2. 决定是否保留该容器

    • 不需要 → docker rm
    • 需要 → 未来重建时应用日志限制
  3. 配置全局日志轮转,防止复发。


如果你告诉我这个容器是什么(运行什么服务),我可以给出更具体的建议(比如是否安全删除、如何调低日志级别等)。