开发者磁盘清理

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 上试试,可以下载浣熊管家,扫描和分析本身不会删除任何内容。下面的演示窗口使用示例数据,仅作示意。

磁盘空间分析

资源库
Macintosh HD用户demo

11 个文件夹 · 1,435,775 个文件

202 GB占用空间
深度 2 层
Application Support76.4 GB
微信19.1 GB
其他应用18.6 GB
Claude12.5 GB
Google11.5 GB
JetBrains7.2 GB
钉钉4.67 GB
Containers65 GB
com.docker.docker50.3 GB
其他容器9.13 GB
com.tencent.xinWeChat4.19 GB
Developer17.9 GB
CoreSimulator13 GB
Xcode4.9 GB
Caches15.6 GB
其他缓存6.38 GB
ms-playwright4.41 GB
JetBrains2.55 GB
Homebrew2.26 GB
pnpm8.28 GB
store7.22 GB
Mail6.44 GB
Android4.47 GB
Gradle4.23 GB
Group Containers1.96 GB
交互演示 · 所有数据均为模拟数据

常见问题

清理构建缓存会删掉我的镜像吗?

不会。docker builder prune 只处理构建缓存,镜像、容器和数据卷都会保留。代价是下一次构建要重新执行原本命中缓存的步骤。

可回收的量显示很多,为什么 Mac 的可用空间没怎么变?

空间从虚拟磁盘还给 macOS 需要一点时间,等几分钟再看。另外,RECLAIMABLE 只是估算,仍被容器使用或被其他对象共享的数据不会被删除。

想彻底清空重来怎么办?

从 Docker 菜单进入 Troubleshoot,使用 Clean up data。它会重置磁盘镜像,删除本机所有容器、镜像和其中的数据,设置会保留。只在你确认不需要任何本地 Docker 数据时使用。

相关文章