在使用 Docker 进行开发、测试和部署的过程中,镜像、容器、数据卷和网络资源会不断累积,大量占用磁盘空间,甚至导致运行异常。本文将详细介绍 Docker 资源清理的全流程方案,涵盖安全清理、彻底清理、场景化清理及避坑指南,帮助你高效释放磁盘空间,保障 Docker 环境稳定运行。

一、先查看 Docker 资源占用情况 📊

清理前,务必先了解当前 Docker 的资源占用状况,避免盲目删除导致重要数据丢失。

1. 查看整体占用情况

# 查看 Docker 整体磁盘使用情况(镜像、容器、卷、构建缓存)
docker system df

输出结果说明:

  • Images:镜像占用空间
  • Containers:容器占用空间(含运行中 / 已停止)
  • Volumes:数据卷占用空间(关键!含持久化数据)
  • Build Cache:构建缓存占用空间

2. 查看详细占用详情

# 查看各维度资源的详细占用信息
docker system df -v

该命令会展示镜像、容器、卷的具体数量、大小及创建时间,帮助你定位占用大户。

二、安全清理:仅删无用资源(推荐首选) ✅

安全清理的核心原则是:不删除运行中容器、在用镜像和重要数据卷,仅清理已停止的容器、悬空镜像和无用网络,适合日常维护。

1. 基础安全清理(一键清理)

# 清理已停止容器、无用网络、悬空镜像和构建缓存
docker system prune

执行后会出现确认提示,输入 y 即可完成清理。

2. 无确认提示的安全清理(脚本适用)

# 强制清理,无需确认
docker system prune -f

3. 安全清理删除的内容

  • 所有已停止的容器
  • 所有未使用的网络
  • 所有悬空镜像(无标签、无引用的镜像)
  • 所有未使用的构建缓存

4. 单独清理各类无用资源(精准控制)

如果只想清理某一类资源,可使用单独的 prune 命令:

# 仅清理已停止的容器
docker container prune -f

# 仅清理无用的网络
docker network prune -f

# 仅清理悬空镜像
docker image prune -f

# 仅清理未使用的构建缓存
docker builder prune -f

三、彻底清理:删除所有未使用资源(慎用) ⚠️

彻底清理会删除所有未被使用的镜像(包括带标签但无容器引用的镜像),适合需要彻底重置环境的场景,生产环境慎用。

1. 基础彻底清理

# 清理已停止容器、无用网络、所有未使用镜像和构建缓存
docker system prune -a

2. 无确认提示的彻底清理

# 强制彻底清理,无需确认
docker system prune -a -f

3. 彻底清理删除的内容

  • 所有已停止的容器
  • 所有未使用的网络
  • 所有未被容器使用的镜像(无论是否有标签)
  • 所有未使用的构建缓存

⚠️ 重要提醒

彻底清理不会删除数据卷!如果需要同时清理未使用的数据卷,需添加 --volumes 参数。

四、场景化清理:针对性解决特定需求 🎯

1. 仅清理 Docker 构建缓存(开发常用)

构建缓存是 docker build 过程中产生的中间层缓存,累积后占用空间较大,仅清理缓存不影响现有镜像和容器:

# 清理未使用的构建缓存
docker builder prune

# 彻底清理所有构建缓存(含已使用缓存)
docker builder prune -a

# 强制清理,无需确认
docker builder prune -a -f

2. 清理数据卷(含持久化数据,高危!)

数据卷存储着容器的持久化数据(如数据库文件、配置文件等),默认 prune 不会删除数据卷,手动清理需格外谨慎:

# 清理未使用的数据卷(谨慎使用!会删除无容器引用的卷数据)
docker volume prune -f

# 彻底清理:容器+网络+镜像+构建缓存+未使用卷
docker system prune -a --volumes -f

⚠️ 数据卷清理风险提示

执行 docker volume prune 或 docker system prune --volumes 会永久删除未被容器引用的数据卷,卷内的所有数据将无法恢复!如果数据卷存储了业务核心数据,务必先备份。

3. 清理悬空镜像(dangling images)

悬空镜像是指无标签、无名称、无容器引用的镜像,通常是 docker build 失败或多次构建产生的残留:

# 查看所有悬空镜像
docker images -f "dangling=true"

# 清理悬空镜像
docker image prune -f

# 强制清理悬空镜像(无需确认)
docker image prune -f

五、Windows 系统专属注意事项 🖥️

在 Windows 系统中使用 Docker Desktop 时,清理资源后可能仍未释放空间,需额外处理:

1. 重启 Docker Desktop

清理资源后,右键点击任务栏中的 Docker 图标,选择 Restart,让 Docker 重新加载资源信息。

2. 清理 WSL 2 分发版缓存(关键!)

Docker Desktop 在 Windows 中依赖 WSL 2 运行,WSL 2 会占用大量磁盘空间,需手动清理:

# 查看 WSL 2 分发版列表
wsl --list --verbose

# 清理 WSL 2 缓存(以 Ubuntu 为例,其他分发版替换名称)
wsl --shutdown
wsl --compact Ubuntu

3. 权限问题处理

如果执行清理命令时提示 “权限不足”,请以管理员身份运行 PowerShell 或 CMD。

六、避坑指南:清理前必看 ⚓

  1. 先备份重要数据:清理数据卷前,务必备份卷内的持久化数据,避免误删核心业务数据。
  2. 区分运行中与已停止容器:docker ps 查看运行中容器,docker ps -a 查看所有容器,不要删除正在运行的容器。
  3. 确认镜像用途:彻底清理前,通过 docker images 查看镜像,确认是否为需要保留的基础镜像或业务镜像。
  4. 定期清理:建议每周执行一次基础安全清理,避免资源累积。

七、总结:常用命令速查 📝

场景命令安全性
日常维护清理docker system prune -f✅ 安全
彻底重置环境docker system prune -a -f⚠️ 慎用
清理构建缓存docker builder prune -a -f✅ 安全
清理数据卷(高危)docker system prune -a --volumes -f❌ 危险
单独清理悬空镜像docker image prune -f✅ 安全

通过以上方法,可根据实际需求灵活选择清理方式,高效释放 Docker 占用的磁盘空间,保障环境稳定运行。如果是开发环境,建议定期执行基础安全清理,养成良好的维护习惯。

更多推荐