用 Docker 部署自建服务的人,大多经历过同一个阶段:最初只跑一两个容器,命令行足够应付;等到容器数量涨到五六个,问题就集中爆发——硬盘空间莫名其妙被吃光,某些容器启动缓慢甚至起不来,升级一个镜像之后服务就出故障。How-To Geek 撰稿人回忆,自己刚接触 Docker 的第一周完全靠终端管理,那段经历”相当难受”。

麻烦的根源在于 Docker 的清理逻辑并不直观:删掉一个容器,并不会同时删掉它的镜像和数据。久而久之,隐藏的构建缓存、残留的持久卷和无人使用的镜像层层堆积,占用的空间远超预期。
第一步:先查清空间到底去哪了
在动手删任何东西之前,应当先看清占用结构。
- 在终端执行
docker system df,查看镜像、容器、卷和构建缓存各自占用多少空间,以及其中有多少属于”可回收”。 - 确认存在大量悬空镜像和已停用容器后,再执行
docker system prune --all进行清理。 - 如果构建缓存仍然庞大,追加执行
docker builder prune单独清掉缓存。
需要特别提醒的是,docker system prune --all 会删除所有已停止的容器、没有被任何容器使用的网络,以及全部未使用的镜像。这条命令不能盲目执行——原文作者正是吃过这个亏才总结出经验。清理完成后,再逐个回看哪些容器仍在日常使用,把长期闲置的手动移除即可,需要时重新拉取并不困难。
第二步:把日常管理交给容器面板
命令行清理虽然可行,却既繁琐又容易误伤。更省心的做法是加装一个容器管理器,例如 Portainer。装好之后,日常操作基本都能在网页界面里完成:
- 打开容器列表,直接查看每个容器占用的端口。容器超过六个时,这一项能有效避免端口冲突。
- 查看运行状态与健康状况。运行/停止状态一目了然,可以避免在执行清理命令时误删处于停止状态但仍需保留的容器。
- 点开日志排查故障,无需再敲一长串命令。
- 进入 Stacks 视图管理编排。该视图本质上是 Docker Compose 文件的图形界面,可直观判断各套编排是否正常运行。
- 在卷管理页面增删数据卷。列表形式能看清哪些卷还在使用、哪些可以安全清除,减少误删重要数据的概率。
- 需要进入容器内部时,直接调用网页终端。
更轻量的替代方案
Portainer 并非唯一选择。另一款常见工具是 Lazydocker,它是终端界面工具而非网页服务,因此资源占用更低,操作路径也更简洁。Portainer 社区版与 Lazydocker 均为开源项目,可按硬件条件自行取舍:家用小主机或树莓派资源紧张时,Lazydocker 更合适;需要多人查看、远程操作时,网页版的 Portainer 更方便。
注意事项
管理面板本身也占用一定资源,但相较于误删数据、排查端口冲突所耗费的时间,这点开销通常划算。清理命令与面板操作可以配合使用:先在面板中确认容器状态,再决定是否执行批量清理,比直接在终端里”一把梭”稳妥得多。
来源:How-To Geek







