本文目前只是梳理了框架,并未补充细节

经常遇到 docker 占用空间,都磁盘都快满了。

网上搜的方法都是df, du分析,说实话有点折腾,效果还不咋地

docker system df

执行获得以下结果:

$ sudo docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        12        11.87GB   3.87GB (32%)
Containers      12        11        147.9MB   0B (0%)
Local Volumes   2         2         0B        0B
Build Cache     0         0         0B        0B

可通过以下命令做清理:

docker system prune -a

注意:

docker system prune 命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。

docker system prune -a 命令清理得更加彻底,会将没有容器使用 Docker 镜像都删掉。

注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了…所以使用之前一定要想清楚吶。

🧹 Docker 容器日志爆炸清理实战(11GB 日志案例)

在排查磁盘占满问题时,可以优先检查 Docker 容器日志目录:

sudo du -h /var/lib/docker/containers | sort -hr | head

典型输出如下:

11G     /var/lib/docker/containers
9.2G    /var/lib/docker/containers/f7a21bf95136...
1.3G    /var/lib/docker/containers/5f9a7bddca8f...

这说明某些容器日志已经达到 GB 级别,极可能是服务异常导致日志持续输出。


📁 Docker 日志存储机制

Docker 默认使用 json-file 日志驱动,日志文件路径为:

/var/lib/docker/containers/<container_id>/<container_id>-json.log

这些日志来自容器的 stdout/stderr,如果不加限制会持续增长。


🔍 定位具体日志文件

sudo ls /var/lib/docker/containers/<container_id>

或使用 find:

sudo find /var/lib/docker/containers/<container_id> -name "*-json.log"

⚡ 快速释放磁盘空间(安全操作)

直接清空日志文件(不会影响容器运行):

sudo truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log

批量清理:

sudo find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;

⚠️ 注意事项

  • 此操作只清空日志,不删除容器数据

  • 适用于紧急释放磁盘空间

  • 如果日志持续增长,说明服务可能存在异常(如连接失败、频繁报错等)


🛡️ 防止日志再次膨胀

建议为 Docker 配置日志大小限制:

logging:
  driver: "json-file"
  options:
    max-size: "100m"
    max-file: "3"

或全局配置 /etc/docker/daemon.json:

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

重启 Docker 生效:

sudo systemctl restart docker

✅ 小结

Docker 容器日志是磁盘占满的常见原因之一,尤其是在服务异常时可能迅速膨胀至数 GB。
通过定期检查与限制日志大小,可以有效避免此类问题。

参考链接:

如何清理Docker占用的磁盘空间?

做自己,而不是解释自己!