用心打造
VPS知识分享网站

Docker容器日志把VPS磁盘占满了怎么办?清理方法来了!

Docker 部署方便,但用久了以后,VPS 磁盘空间可能在几天内突然被吃光。检查网站文件和数据库都不大,最后才发现真正占空间的是容器日志。

我见过不少小配置 VPS,应用本身只占几百 MB,容器的 JSON 日志却涨到十几 GB。磁盘满了之后,数据库无法写入、容器重启失败,连 SSH 操作都会变得很慢。

Docker容器日志占满VPS磁盘示意图

今天这篇文章就来讲清楚,怎么找到占满磁盘的 Docker 日志、怎样安全释放空间,以及如何设置日志轮转,避免同样的问题再次出现

一、为什么Docker日志会越积越多?

Docker 默认常使用 json-file 日志驱动。容器写到标准输出和标准错误的内容,会被保存到宿主机上的 JSON 日志文件中。

应用访问日志、报错堆栈、调试信息和循环异常都可能持续写入。如果没有设置大小上限,日志文件就会跟着运行时间不断增长。

最常见的情况是程序进入报错循环:服务没有完全崩溃,却每秒写几十条错误。真正危险的不是正常访问量,而是失控的重复日志没有轮转上限

二、先确认是不是Docker占满了磁盘

先看磁盘整体使用情况:

df -h

再查看 Docker 数据目录大小:

sudo du -sh /var/lib/docker

想定位大文件,可以执行:

sudo find /var/lib/docker/containers/ -name "*-json.log" -type f -printf "%s %p\n" | sort -nr | head

不同系统的 Docker Root Dir 可能不在 /var/lib/docker。可以先运行 docker info,查看真实位置。

三、怎么找到日志属于哪个容器?

日志目录通常以完整容器 ID 命名。先列出容器:

docker ps -a --no-trunc

再对照大日志路径中的容器 ID。也可以查看单个容器的日志文件位置:

docker inspect --format='{{.LogPath}}' 容器名称

找到容器后,先看最近的错误内容:

docker logs --tail 100 容器名称

不要一上来就删除文件。先确认日志为什么暴涨,否则空间刚清出来,几小时后还会再次写满。

四、怎样安全清理已经很大的日志?

最稳妥的临时处理是把日志文件截断为 0,而不是直接删除:

sudo truncate -s 0 "$(docker inspect --format='{{.LogPath}}' 容器名称)"

截断后用 df -h 再次确认磁盘是否释放。容器通常不需要停止,原日志文件的路径和文件句柄也会保留。

处理方式 风险 建议
截断日志 历史日志丢失 紧急释放空间时使用
直接删除日志 进程可能继续占用已删除文件 不建议
重启Docker后清理 会影响全部容器 仅在维护窗口处理
配置日志轮转 旧容器不会自动应用 长期方案

重要日志先复制到其他磁盘或对象存储。数据库报错、支付回调和安全日志一旦清空,后续排查可能缺少证据。

五、如何限制Docker日志大小?

编辑 /etc/docker/daemon.json,加入:

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

然后重启 Docker:

sudo systemctl restart docker

这个示例把单个日志文件限制为 10MB,最多保留 3 个。Docker 官方文档提醒,max-size 和 max-file 在配置文件中都要写成字符串。

还要注意:默认日志配置只会自动应用到新创建的容器,已经存在的容器需要重新创建才能使用新设置

六、Docker Compose怎么单独设置?

某个容器日志特别多时,可以在 compose.yaml 中单独配置:

services:
  app:
    image: your-image
    logging:
      driver: json-file
      options:
        max-size: 10m
        max-file: "3"

保存后重新创建服务:

docker compose up -d --force-recreate

限制大小只是兜底。应用仍要减少无意义的 debug 输出,修复循环报错,并把真正需要长期保存的日志交给专门的日志系统。

七、为什么清理后磁盘还是没释放?

文件被删除后,只要进程仍然保持打开状态,空间就可能没有立即归还。可以运行:

sudo lsof +L1

看到 Docker 或其他服务仍占用 deleted 文件时,需要在业务允许的时间重启对应容器或服务。

还要检查 Docker 镜像、停止的容器、构建缓存和 volume。docker system df 可以先查看占用,之后再决定清理哪些内容。不要在不了解数据用途时直接执行带 volumes 的全量清理,数据库数据卷可能被误删。

八、怎样避免磁盘再次被写满?

除了日志轮转,我更建议给磁盘留出监控阈值。使用率达到 70% 时提醒,达到 85% 时优先排查,别等到 100% 才处理。

部署多个容器时,50GB 磁盘并不算特别宽裕。新手选择节点和配置时,可以关注磁盘扩容、快照和售后支持,例如 萤光云LightNode 都可以作为对比对象。真正重要的是先规划日志、备份和数据卷,而不是只看初始容量。

常见问题

问:清空Docker日志会影响容器运行吗?
答:截断日志通常不影响运行,但历史记录会丢失。

问:重启容器会自动清空日志吗?
答:不会,原日志通常仍会保留。

问:修改daemon.json后为什么没有生效?
答:旧容器需重新创建,单纯重启往往不够。

问:可以直接删除整个containers目录吗?
答:不可以,可能破坏容器元数据。

问:日志限制设置多大合适?
答:小型应用可从10MB乘3份开始,再按需求调整。

温馨提示

磁盘满后,最先要做的是确认占用来源,而不是随手执行清理脚本。Docker 日志、镜像缓存、数据库文件和备份的处理方式完全不同,删错数据往往比磁盘不足更麻烦。

长期运行的容器一定要配置 日志轮转、磁盘监控和备份策略。清理只能解决眼前的问题,限制日志增长才是长期方案。

赞(0)
未经允许不得转载;国外VPS测评网 » Docker容器日志把VPS磁盘占满了怎么办?清理方法来了!
分享到