数码知识屋
霓虹主题四 · 更硬核的阅读氛围

Docker容器磁盘空间清理实用技巧

发布时间:2025-12-17 03:13:14 阅读:0 次

ref="/tag/439/" style="color:#8B0506;font-weight:bold;">容器跑着跑着系统盘就满了?别慌,这是常态

Docker开发或部署服务的人应该都有类似经历:明明没放几个应用,/var/lib/docker 目录却占了几十GB。查了一圈发现,罪魁祸首往往是那些已经停掉的容器、废弃的镜像,还有没人管的日志文件。

先看看磁盘到底被谁占了

别急着删东西,先搞清楚现状。执行下面命令,能直观看到Docker各部分占用情况:

docker system df

输出结果会列出镜像、容器、卷、构建缓存等的使用量。比如你可能发现“RECLAIMABLE”那一栏写着十几GB,说明有大量可回收空间。

一键清理:最常用的回收命令

如果只是想快速释放空间,这条命令能清掉所有未使用的资源:

docker system prune -a

加上 -a 是为了连带删除未被任何容器引用的镜像。执行后通常能腾出可观空间。但注意,这会删掉你不用的镜像,下次启动还得重新拉,所以生产环境慎用。

精准下手:单独处理日志膨胀问题

有时候空间暴增不是因为镜像,而是某个容器狂写日志。比如你本地跑了个Node.js服务,调试时输出一堆信息,时间一长单个容器日志就能到几个GB。

查看某个容器日志大小:

du -sh /var/lib/docker/containers/<container_id>/*.log

限制日志大小可以在启动容器时加参数:

docker run -d --log-opt max-size=100m --log-opt max-file=3 your_image

这样日志最多保留3个文件,每个不超过100MB,避免无限增长。

定期维护:别让缓存堆积成山

如果你经常build镜像,那构建缓存可能是隐藏大户。时间久了,这些中间层会越积越多。清理它们:

docker builder prune --all

或者直接清空整个构建缓存:

docker builder prune -a -f

顺手再检查下有没有孤立的volume:

docker volume ls -qf dangling=true

有就删:

docker volume rm $(docker volume ls -qf dangling=true)

自动化点:加个定时任务省心

如果你在服务器上长期运行Docker,可以设置一个cron任务每月自动清理一次:

0 0 1 * * /usr/bin/docker system prune -af

加 -f 是免交互执行。不过记得评估业务场景,别把正在用的资源误删了。

小技巧:换个数据目录也行

如果根分区实在紧张,可以把Docker的数据目录迁到其他大容量分区。改配置文件 /etc/docker/daemon.json

{
  "data-root": "/mnt/bigdisk/docker"
}

重启Docker服务后,新容器都会存到新位置,老的可以逐步清理。