用ref="/tag/2019/" style="color:#479099;font-weight:bold;">Docker的人大多都遇到过这种情况:明明没装几个服务,系统盘却突然告急。打开一看,C盘少了十几个GB,罪魁祸首往往就是那些默默运行的容器和它们留下的“垃圾”。
为什么Docker会占用这么多空间?
Docker在运行过程中会产生几类数据:镜像(images)、容器(containers)、卷(volumes)和构建缓存(build cache)。每次pull镜像、启动容器、重启服务,都会留下痕迹。尤其是频繁测试或开发时,旧的镜像删不干净,停止的容器还占着地盘,久而久之空间就被耗光了。
查看当前磁盘使用情况
先别急着删,搞清楚谁在占空间更重要。执行下面命令看看Docker的资源占用:
docker system df
输出结果会列出镜像、容器、卷和缓存的使用量,一目了然。比如你可能发现“<none>”标签的悬空镜像占了快5GB,这些就是该清理的目标。
一键清理未使用的资源
Docker自带一个“大扫除”命令,能自动清除所有未被使用的对象:
docker system prune -a
这个命令会删掉所有停止的容器、未被引用的镜像、构建缓存以及网络。加了 -a 参数后连没在用的镜像也会清掉,效果更彻底。执行前会提示确认,不用担心误删正在跑的服务。
单独处理积压的容器和镜像
如果你只想针对性清理,可以分步操作。比如删掉所有已停止的容器:
docker container prune
删除没有标签或没被任何容器引用的镜像:
docker image prune -a
这些命令更温和,适合日常维护,不会影响正在运行的服务。
别忘了清理 volumes
很多人忽略了 volumes,它们是独立于容器存在的数据卷,即使容器删了,数据还在硬盘上。长期积累下来可能比镜像还占地方。
查看所有卷的使用情况:
docker volume ls
删除不用的卷:
docker volume prune
如果某个项目已经废弃,对应的数据卷完全可以一起清掉,省出大量空间。
养成好习惯,避免空间再次爆满
开发中经常 build 新镜像,容易产生一堆临时层。建议在构建时加上 --rm 参数,让中间层自动清理:
docker build --rm=true -t myapp .
另外,定期执行一次 docker system prune,就像给电脑做磁盘清理一样,保持环境清爽。
下次再看到C盘红了,先别慌着卸软件,查查Docker是不是在偷偷“囤货”。几分钟的清理,很可能就能腾出几个GB的空间。