
自从 Docker 问世以来,应用的部署方式就发生了翻天覆地的变化。借助容器化技术,开发与运维流程变得越发灵活,效率也得到了大幅提升。就连 Homelab 玩家,也能随时拉取一个感兴趣的应用来玩玩儿 😘。
但是,随着 Docker 环境的不断扩展,如何高效管理容器、镜像、数据卷和网络等资源,就成了一个不可忽视的问题。于是乎,我们就需要借助一些常用命令和实用技巧,科学地进行 Docker 环境清理,移除那些不再需要的资源,来防止资源堆积,并降低安全风险。
什么是 Docker 清理?
在日常使用过程中,你肯定会不断创建容器。这些容器本质上是轻量级、可移植的运行环境,用来封装应用及其依赖。但随着开发迭代,容器、镜像、数据卷和网络的数量也会不断膨胀。如果不加以清理,这些历史资源就会霸占大量磁盘空间,影响系统性能。
Docker 清理,简单来说就是——对资源进行统一管理和合理移除。定期发现并删除那些未被使用或已无留存必要的冗余资源。
这样做不仅能够有效释放磁盘空间,还能提升系统运行效率,让环境更加井然有序,确保应用稳定流畅地运行。
合理进行 Docker 清理,可以有效避免资源堆积,维持整洁的开发与生产环境。
Docker 基础知识回顾
要高效地完成 Docker 清理,首先你得理解 Docker 的核心资源类型:
- 在 Docker 中,「镜像」相当于应用运行所需环境的完整打包,包含了所有必备文件及系统配置。当你基于镜像运行应用时,就会生成一个独立的「容器」。每个容器都是一个隔离的小型运行环境,确保应用彼此独立且高效运行。
- 容器之间通过「网络」实现互联,可以便捷地进行通讯和数据交换。与此同时,「数据卷」为容器提供了数据持久化支持,即便容器被重启或删除,重要数据也能够保留下来并继续访问。
正因为如此,镜像、容器、网络与数据卷共同构成了 Docker 容器化的基础。只有掌握这些核心概念,才能更有针对性地进行资源管理和清理,让应用的部署与维护更加高效、可靠。
Docker 磁盘空间管理
定期检查 Docker 的磁盘空间占用,是防止「磁盘被爆」的重要举措。这不仅有助于保障系统性能,还能有效预防部署失败、容器运行缓慢等潜在问题。
1你可以使用以下命令,快速了解当前 Docker 占用了多少磁盘空间:
docker system df
这条命令会统计镜像、容器、数据卷以及构建缓存等 Docker 组件的磁盘使用情况,并输出一个概览信息。
2如果你想看到更详细的磁盘占用数据,在命令后面加上-v
参数就行:
docker system df -v
这样就能详细列出每个具体资源的使用情况,包括空间占用、文件系统类型、挂载点等信息。

Docker Prune 命令:一键清理神器
docker system prune
命令可以说是清理 Docker 环境的「一键神器」。当你的磁盘空间告急,或者只想保留「真正必要」的 Docker 资源时,它都能帮你轻松移除那些无用数据。具体来说,它能自动删除以下内容:
- 所有「已停止」的容器。
- 所有未被任何容器使用的网络。
- 所有悬空镜像。
- 不使用的构建缓存。
在开发、测试,或者 Homelab 玩家的环境中,由于频繁创建和删除容器、镜像,很容易造成资源堆积。此时,只要你执行下面这条「神操作命令」,就能快速释放磁盘空间,让环境保持整洁高效:
docker system prune

执行该命令后,Docker 就会自动扫描并移除所有未被使用的资源,帮你高效回收空间。虽然也可以加-f
参数来强制删除,但极不推荐,(移除前)最好还是先确认一下。
如果你只是想让 Homelab 中的 Docker 环境保持干净清爽,并且支持自动更新镜像和容器,可以考虑装一个 Watchtower 来完成自动化,后文内容可以略过了。
Docker 镜像删除指南
按需删除指定镜像
1我们可以通过以下命令查看当前系统中所有的 Docker 镜像(包括基础镜像和中间层镜像),详细信息包括了镜像 ID 和 Tag 等:
docker images -a
2在确认要删除的镜像后,再通过以下命令,结合镜像 ID 或 Tag 进行精准删除。
- 根据镜像 ID 删除指定镜像:
docker rmi <image_id>
执行完该命令后,Docker 会先解除该镜像的 Tag 绑定,然后彻底删除镜像文件。同时,还会自动识别并清除那些仅被这个镜像引用的层(Layer),进一步节省磁盘空间。

- 根据镜像 Tag 删除:
docker rmi <image_tag>
- 同时删除多个镜像:
docker rmi <image1> <image2> <image3>
- 一键删除全部本地镜像(谨慎使用 😈):
docker rmi $(docker images -a -q)
借助过滤器精准清理镜像
docker image prune
命令支持灵活的过滤参数,可以帮你更加精准地批量清理无用(悬空)镜像。比如:
docker image prune --filter "your_filter"
通过不同的过滤条件,可以帮你高效清理特定类型的镜像:
- 删除 24 小时前创建的悬空镜像:
docker image prune --filter "until=24h"
- 删除带有特定 Label 的镜像:
docker image prune --filter "label=unused"
- 删除所有悬空镜像:
docker image prune --filter "dangling=true"
基于模式批量筛选并删除镜像
如果你想先通过关键词来筛选镜像,然后再批量删除,可以按照以下步骤操作:
1列出所有本地镜像:
docker images -a
2通过命令筛选出符合特定模式的镜像:
docker images -a | grep "node"
3使用awk
和xargs
组合,将筛选结果传递给docker rmi
,进行批量删除:
docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi
通过以上方式,你可以灵活筛选目标镜像,并进行高效批量清理。
Docker 容器删除指南
按需删除指定容器
要删除一个或多个 Docker 容器,可以使用docker rm
命令,后接要删除的容器 ID 或名称:
docker rm <ID_or_Name>

容器退出后自动删除
如果你希望容器在退出后自动删除,只需要在运行容器时加上--rm
参数:
docker run --rm <image_name>
批量删除所有「已退出」的容器
1使用以下命令,查看所有「已停止」(exited)的容器,识别待清理对象:
docker ps -a -f status=exited
2使用-q
参数输出容器 ID,再配合docker rm
批量删除所有「已退出」的容器:
docker rm $(docker ps -a -f status=exited -q)
按模式批量筛选并删除容器
你也可以根据容器名称或其他关键字筛选目标容器,再进行清理。例如:
1查找所有名称或相关信息包含「pattern」的容器:
docker ps -a | grep "pattern"
2再结合awk
和xargs
,批量删除这些容器:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
一键清理所有「已停止」容器
使用以下命令,可以一键删除所有「已停止」(stopped)的容器(谨慎操作 😈):
docker container prune

一键删除所有 Docker 容器
如果要彻底删除系统中的所有容器(无论是否正在运行),可以使用以下命令(极度谨慎 😈😈):
docker rm $(docker ps -aq)
Docker 数据卷删除指南
按需删除指定数据卷
1如果你想删除一个或多个特定的数据卷,可以先使用以下命令列出所有数据卷:
docker volume ls
2根据查询结果,使用以下命令,指定要删除的数据卷名称或 ID:
docker volume rm <volume_name> <volume_id>

删除悬空数据卷
1如果要清理那些未被任何容器使用的悬空数据卷,可以添加-f dangling=true
参数进行过滤查看:
docker volume ls -f dangling=true
2然后再使用docker volume rm
命令逐个或批量删除。
一键清理未使用数据卷
如果你想一键清理所有无用数据卷,可以使用以下命令(谨慎操作 😈):
docker volume prune

Docker 网络删除指南
删除指定网络
1当你需要删除一个或多个特定网络时,可以先使用以下命令列出当前所有网络:
docker network ls
2根据查询结果,使用以下命令,指定要删除的网络名称或 ID:
docker network rm <network_name> <network_id>

如果你一次性传入多个网络参数,Docker 会按顺序逐个尝试删除。如果其中某个网络无法删除(例如正被某个容器占用),它会自动跳过,并继续删除后续的网络。
Docker 清理命令速查表
为了方便大家快速查阅和动手实操,这里整理了一份最常用的 Docker 清理命令速查表:
命令 | 说明 |
---|---|
docker system df | 查看 Docker 磁盘资源占用情况 |
docker system prune | 一键删除所有未使用的容器、网络、镜像 |
docker rmi $(docker images -a -q) | 删除所有本地镜像 |
docker image prune --filter "dangling=true" | 清理所有悬空镜像 |
docker rm $(docker ps -a -f status=exited -q) | 删除所有「已退出」的容器 |
docker container prune | 清理所有「已停止」的容器 |
docker volume prune | 清理所有未使用的数据卷 |
docker network prune | 清理所有未使用的网络 |
合理的 Docker 清理,是高效管理资源的基础。通过系统性地删除不使用的容器、镜像、数据卷和网络,不仅可以有效释放磁盘空间,还能提升系统整体性能,并降低潜在的安全风险。本文汇总了最实用的清理命令和技巧,希望能你高效维护 Docker 环境,践行最佳实践 🚀。
最新评论
用注册表设置了,最小的图标还是太大
也有可能是电脑过热
关闭「安全启动」或改用 grub 之后。通过 grub 启动 Windows 而不使用 UEFI 的 Windows Boot Manager,「设备加密」会认为启动路径不可信,就会彻底隐藏。
应用安装失败,错误消息: 从 (Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.Appx) 使用程序包 Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe 中的目标卷 C: 执行的部署 Add 操作失败,错误为 0x80040154。有关诊断应用部署问题的帮助,请参阅 http://go.microsoft.com/fwlink/?LinkId=235160。 (0x80040154)