Docker Desktop 在 Mac 上占用太大,怎么回收空间
弄清 Docker Desktop 的虚拟磁盘里装了什么,用官方命令清理构建缓存、镜像和容器,同时保住数据卷里的数据。
发布于 2026/10/29作者 浣熊管家团队
在 Mac 上,Docker Desktop 把镜像、容器、数据卷和构建缓存都放进同一个虚拟磁盘文件。你在访达里只能看到一个越来越大的 Docker.raw,看不出里面是什么。回收空间的关键,是在 Docker 内部分清哪些是可以重建的缓存、哪些是你的数据,再用 Docker 自己的命令清理,而不是去动这个文件。
Docker 的空间都在哪里
Docker Desktop 在一台轻量虚拟机里运行容器,虚拟机的磁盘默认是下面这个文件,实际位置可以在 Settings → Resources → Advanced 中查看。它是稀疏文件,有些工具(例如 ls -l)显示的是它的上限,用 du 才能看到真正占用了多少:
# 查看 Docker 虚拟磁盘实际占用的空间
du -h ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# 按类型汇总 Docker 内部的占用,需要 Docker 正在运行
docker system df
# 列出每个镜像、容器、数据卷和构建缓存的明细
docker system df -v
docker system df 的输出分为 Images(镜像)、Containers(容器)、Local Volumes(数据卷)和 Build Cache(构建缓存)四行,RECLAIMABLE 一列是 Docker 估计可以回收的量。先看哪一行最大,再决定从哪里下手。
哪些能删,哪些要小心
| 类型 | 是什么 | 能不能删 |
|---|---|---|
| 构建缓存 | docker build 留下的层和中间结果 | 可以,代价是下次构建变慢、可能重新下载依赖 |
| 悬空镜像 | 没有标签、也不被其他镜像引用的旧层 | 可以 |
| 未使用的镜像 | 当前没有任何容器在用的镜像 | 一般可以,需要时重新拉取;只在本机构建、没推送到仓库的镜像要先确认 |
| 已停止的容器 | 停止但没删除的容器 | 先确认里面没有需要的文件或状态 |
| 数据卷 | 数据库、上传文件等持久化数据 | 当作数据对待,不要为了腾空间批量删除 |
注意
不要直接删除或移动 Docker.raw,也不要为了让数字变小去调低磁盘镜像的上限。按 Docker Desktop 文档,调低上限会删除现有磁盘镜像,所有容器和镜像都会丢失;要换存放位置,请在设置中修改,不要在访达里拖动。
用命令回收空间
下面的命令都要在 Docker 运行时执行。不加 -f 时,Docker 会先列出要删除的内容,等你确认后才动手。
构建缓存
# 清理悬空的构建缓存
docker builder prune
# 清理所有未使用的构建缓存
docker builder prune --all
# 只清理超过 7 天的未使用构建缓存
docker builder prune --all --filter until=168h
构建缓存通常是最值得先清的一块,镜像、容器和数据卷都不受影响。更多参数见 docker builder prune 文档。
镜像和已停止的容器
# 删除所有已停止的容器
docker container prune
# 删除悬空镜像
docker image prune
# 删除所有没有容器在用的镜像,回收最多,之后要用时需重新拉取
docker image prune -a
数据卷
docker volume ls
# 默认只删除未被使用的匿名卷,命名卷会保留
docker volume prune
加上 --all 才会连未被使用的命名卷一起删除。命名卷里常常是数据库数据,删除前逐个确认,必要时先备份。
一键清理的范围
docker system prune 会一并删除已停止的容器、未被使用的网络、悬空镜像和未使用的构建缓存;加 -a 还会删除所有没有容器使用的镜像,加 --volumes 会删除未被使用的匿名卷。它省事,但范围大,执行前把 Docker 列出的清单读一遍。
确认 Mac 上真的变小了
清理后再运行一次 docker system df,并用前面的 du 命令查看 Docker.raw。按 Docker 的说明,空间还给 macOS 可能需要几分钟。如果 Docker 里已经很干净,磁盘仍然紧张,就该看看其他目录了。
用浣熊管家清理
浣熊管家的深度清理在 容器缓存 类别中提供两项与 Docker Desktop 有关的内容:
- Docker 构建缓存:扫描时读取 Docker 标记为未使用、也未被镜像共享的构建缓存,估算可清理的大小;清理时执行
docker --context default builder prune --all --force,镜像、容器、网络和数据卷都会保留。它需要 Docker 正在运行,否则不会出现在结果中,也不会被 智能推荐 预先勾选。清理后浣熊管家会再读取一次 Docker 的统计,按前后差值计算实际清理量。 - Docker Desktop 旧日志:宿主机和虚拟机超过 7 天的诊断日志,标有 低风险,会被智能推荐预先勾选。清理前需要退出 Docker Desktop,近 7 天的日志会保留。
提示
这两项对 Docker 运行状态的要求正好相反,建议分两次处理:先在 Docker 运行时清理构建缓存,再退出 Docker Desktop 清理旧日志。
浣熊管家固定使用 default 上下文,不会跟随 DOCKER_HOST 或你切换到的其他上下文。镜像、容器、数据卷、Docker.raw 和你自建的 Buildx 构建器都不在它的处理范围内,这些请用上面的命令管理。清理直接生效、无法撤销,结果记录在操作历史中。
不确定空间是不是被 Docker 占用,可以用磁盘空间分析打开个人资源库中的 Containers 文件夹,看看 com.docker.docker 有多大。想在自己的 Mac 上试试,可以下载浣熊管家,扫描和分析本身不会删除任何内容。下面的演示窗口使用示例数据,仅作示意。
磁盘空间分析
11 个文件夹 · 1,435,775 个文件
常见问题
清理构建缓存会删掉我的镜像吗?
不会。docker builder prune 只处理构建缓存,镜像、容器和数据卷都会保留。代价是下一次构建要重新执行原本命中缓存的步骤。
可回收的量显示很多,为什么 Mac 的可用空间没怎么变?
空间从虚拟磁盘还给 macOS 需要一点时间,等几分钟再看。另外,RECLAIMABLE 只是估算,仍被容器使用或被其他对象共享的数据不会被删除。
想彻底清空重来怎么办?
从 Docker 菜单进入 Troubleshoot,使用 Clean up data。它会重置磁盘镜像,删除本机所有容器、镜像和其中的数据,设置会保留。只在你确认不需要任何本地 Docker 数据时使用。
相关文章
开发者磁盘清理发布于 2026/10/29
旧项目的 node_modules、target、build 目录怎么批量清理
找出旧项目里可以重新生成的依赖和构建目录,用命令或浣熊管家批量清理,同时避开虚拟环境和被 Git 跟踪的文件。
开发者磁盘清理发布于 2026/10/29
npm、pnpm、Yarn 缓存怎么清理,不影响项目
分清全局缓存和项目里的 node_modules,用官方命令清理 npm、pnpm、Yarn 缓存,并避开几个容易踩的坑。
开发者磁盘清理发布于 2026/10/29
Xcode 占用几十 GB:DerivedData、模拟器、设备支持文件怎么清
看清 Xcode 的空间花在哪里,DerivedData、模拟器、运行时和设备支持文件哪些能删、怎么删,哪些必须保留。