[{"data":1,"prerenderedAt":58},["ShallowReactive",2],{"blog-zh-docker-disk-space-mac":3},{"meta":4,"html":14,"headings":15,"raw":57},{"title":5,"description":6,"topic":7,"date":8,"author":9,"icons":10},"Docker Desktop 在 Mac 上占用太大，怎么回收空间","弄清 Docker Desktop 的虚拟磁盘里装了什么，用官方命令清理构建缓存、镜像和容器，同时保住数据卷里的数据。","developer-cleanup","2026-10-29","浣熊管家团队",[11,12,13],"container","database","terminal","\u003Cp>在 Mac 上，Docker Desktop 把镜像、容器、数据卷和构建缓存都放进同一个虚拟磁盘文件。你在访达里只能看到一个越来越大的 \u003Ccode>Docker.raw\u003C\u002Fcode>，看不出里面是什么。回收空间的关键，是在 Docker 内部分清哪些是可以重建的缓存、哪些是你的数据，再用 Docker 自己的命令清理，而不是去动这个文件。\u003C\u002Fp>\n\u003Ch2 id=\"where-docker-stores-data\">\u003Ca class=\"heading-anchor\" href=\"#where-docker-stores-data\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>Docker 的空间都在哪里\u003C\u002Fh2>\n\u003Cp>Docker Desktop 在一台轻量虚拟机里运行容器，虚拟机的磁盘默认是下面这个文件，实际位置可以在 \u003Cstrong>Settings → Resources → Advanced\u003C\u002Fstrong> 中查看。它是稀疏文件，有些工具（例如 \u003Ccode>ls -l\u003C\u002Fcode>）显示的是它的上限，用 \u003Ccode>du\u003C\u002Fcode> 才能看到真正占用了多少：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># 查看 Docker 虚拟磁盘实际占用的空间\ndu -h ~\u002FLibrary\u002FContainers\u002Fcom.docker.docker\u002FData\u002Fvms\u002F0\u002Fdata\u002FDocker.raw\n# 按类型汇总 Docker 内部的占用，需要 Docker 正在运行\ndocker system df\n# 列出每个镜像、容器、数据卷和构建缓存的明细\ndocker system df -v\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>docker system df\u003C\u002Fcode> 的输出分为 Images（镜像）、Containers（容器）、Local Volumes（数据卷）和 Build Cache（构建缓存）四行，RECLAIMABLE 一列是 Docker 估计可以回收的量。先看哪一行最大，再决定从哪里下手。\u003C\u002Fp>\n\u003Ch2 id=\"safe-vs-risky\">\u003Ca class=\"heading-anchor\" href=\"#safe-vs-risky\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>哪些能删，哪些要小心\u003C\u002Fh2>\n\u003Cdiv class=\"table-wrap\">\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>类型\u003C\u002Fth>\u003Cth>是什么\u003C\u002Fth>\u003Cth>能不能删\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>构建缓存\u003C\u002Ftd>\u003Ctd>\u003Ccode>docker build\u003C\u002Fcode> 留下的层和中间结果\u003C\u002Ftd>\u003Ctd>可以，代价是下次构建变慢、可能重新下载依赖\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>悬空镜像\u003C\u002Ftd>\u003Ctd>没有标签、也不被其他镜像引用的旧层\u003C\u002Ftd>\u003Ctd>可以\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>未使用的镜像\u003C\u002Ftd>\u003Ctd>当前没有任何容器在用的镜像\u003C\u002Ftd>\u003Ctd>一般可以，需要时重新拉取；只在本机构建、没推送到仓库的镜像要先确认\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>已停止的容器\u003C\u002Ftd>\u003Ctd>停止但没删除的容器\u003C\u002Ftd>\u003Ctd>先确认里面没有需要的文件或状态\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>数据卷\u003C\u002Ftd>\u003Ctd>数据库、上传文件等持久化数据\u003C\u002Ftd>\u003Ctd>当作数据对待，不要为了腾空间批量删除\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cdiv class=\"callout callout-warning\">\u003Cp class=\"callout-title\">注意\u003C\u002Fp>\u003Cp>不要直接删除或移动 \u003Ccode>Docker.raw\u003C\u002Fcode>，也不要为了让数字变小去调低磁盘镜像的上限。按 \u003Ca href=\"https:\u002F\u002Fdocs.docker.com\u002Fdesktop\u002Ftroubleshoot-and-support\u002Ffaqs\u002Fmacfaqs\u002F\" target=\"_blank\" rel=\"noopener\">Docker Desktop 文档\u003C\u002Fa>，调低上限会删除现有磁盘镜像，所有容器和镜像都会丢失；要换存放位置，请在设置中修改，不要在访达里拖动。\u003C\u002Fp>\n\u003C\u002Fdiv>\u003Ch2 id=\"manual-cleanup\">\u003Ca class=\"heading-anchor\" href=\"#manual-cleanup\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>用命令回收空间\u003C\u002Fh2>\n\u003Cp>下面的命令都要在 Docker 运行时执行。不加 \u003Ccode>-f\u003C\u002Fcode> 时，Docker 会先列出要删除的内容，等你确认后才动手。\u003C\u002Fp>\n\u003Ch3 id=\"build-cache\">\u003Ca class=\"heading-anchor\" href=\"#build-cache\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>构建缓存\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\"># 清理悬空的构建缓存\ndocker builder prune\n# 清理所有未使用的构建缓存\ndocker builder prune --all\n# 只清理超过 7 天的未使用构建缓存\ndocker builder prune --all --filter until=168h\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>构建缓存通常是最值得先清的一块，镜像、容器和数据卷都不受影响。更多参数见 \u003Ca href=\"https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fbuilder\u002Fprune\u002F\" target=\"_blank\" rel=\"noopener\">docker builder prune 文档\u003C\u002Fa>。\u003C\u002Fp>\n\u003Ch3 id=\"images-and-containers\">\u003Ca class=\"heading-anchor\" href=\"#images-and-containers\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>镜像和已停止的容器\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\"># 删除所有已停止的容器\ndocker container prune\n# 删除悬空镜像\ndocker image prune\n# 删除所有没有容器在用的镜像，回收最多，之后要用时需重新拉取\ndocker image prune -a\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"volumes\">\u003Ca class=\"heading-anchor\" href=\"#volumes\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>数据卷\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">docker volume ls\n# 默认只删除未被使用的匿名卷，命名卷会保留\ndocker volume prune\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>加上 \u003Ccode>--all\u003C\u002Fcode> 才会连未被使用的命名卷一起删除。命名卷里常常是数据库数据，删除前逐个确认，必要时先备份。\u003C\u002Fp>\n\u003Ch3 id=\"system-prune\">\u003Ca class=\"heading-anchor\" href=\"#system-prune\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>一键清理的范围\u003C\u002Fh3>\n\u003Cp>\u003Ccode>docker system prune\u003C\u002Fcode> 会一并删除已停止的容器、未被使用的网络、悬空镜像和未使用的构建缓存；加 \u003Ccode>-a\u003C\u002Fcode> 还会删除所有没有容器使用的镜像，加 \u003Ccode>--volumes\u003C\u002Fcode> 会删除未被使用的匿名卷。它省事，但范围大，执行前把 Docker 列出的清单读一遍。\u003C\u002Fp>\n\u003Ch3 id=\"check-disk-image\">\u003Ca class=\"heading-anchor\" href=\"#check-disk-image\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>确认 Mac 上真的变小了\u003C\u002Fh3>\n\u003Cp>清理后再运行一次 \u003Ccode>docker system df\u003C\u002Fcode>，并用前面的 \u003Ccode>du\u003C\u002Fcode> 命令查看 \u003Ccode>Docker.raw\u003C\u002Fcode>。按 Docker 的说明，空间还给 macOS 可能需要几分钟。如果 Docker 里已经很干净，磁盘仍然紧张，就该看看其他目录了。\u003C\u002Fp>\n\u003Ch2 id=\"washbear\">\u003Ca class=\"heading-anchor\" href=\"#washbear\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>用浣熊管家清理\u003C\u002Fh2>\n\u003Cp>浣熊管家的\u003Ca href=\"\u002Fdocs\u002Fdeep-clean\">深度清理\u003C\u002Fa>在 \u003Cstrong>容器缓存\u003C\u002Fstrong> 类别中提供两项与 Docker Desktop 有关的内容：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Docker 构建缓存\u003C\u002Fstrong>：扫描时读取 Docker 标记为未使用、也未被镜像共享的构建缓存，估算可清理的大小；清理时执行 \u003Ccode>docker --context default builder prune --all --force\u003C\u002Fcode>，镜像、容器、网络和数据卷都会保留。它需要 Docker 正在运行，否则不会出现在结果中，也不会被 \u003Cstrong>智能推荐\u003C\u002Fstrong> 预先勾选。清理后浣熊管家会再读取一次 Docker 的统计，按前后差值计算实际清理量。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Docker Desktop 旧日志\u003C\u002Fstrong>：宿主机和虚拟机超过 7 天的诊断日志，标有 \u003Cstrong>低风险\u003C\u002Fstrong>，会被智能推荐预先勾选。清理前需要退出 Docker Desktop，近 7 天的日志会保留。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"callout callout-tip\">\u003Cp class=\"callout-title\">提示\u003C\u002Fp>\u003Cp>这两项对 Docker 运行状态的要求正好相反，建议分两次处理：先在 Docker 运行时清理构建缓存，再退出 Docker Desktop 清理旧日志。\u003C\u002Fp>\n\u003C\u002Fdiv>\u003Cp>浣熊管家固定使用 \u003Ccode>default\u003C\u002Fcode> 上下文，不会跟随 \u003Ccode>DOCKER_HOST\u003C\u002Fcode> 或你切换到的其他上下文。镜像、容器、数据卷、\u003Ccode>Docker.raw\u003C\u002Fcode> 和你自建的 Buildx 构建器都不在它的处理范围内，这些请用上面的命令管理。清理直接生效、无法撤销，结果记录在\u003Ca href=\"\u002Fdocs\u002Fgetting-started#history\">操作历史\u003C\u002Fa>中。\u003C\u002Fp>\n\u003Cp>不确定空间是不是被 Docker 占用，可以用\u003Ca href=\"\u002Fdocs\u002Fdisk-analysis\">磁盘空间分析\u003C\u002Fa>打开个人资源库中的 \u003Ccode>Containers\u003C\u002Fcode> 文件夹，看看 \u003Ccode>com.docker.docker\u003C\u002Fcode> 有多大。想在自己的 Mac 上试试，可以\u003Ca href=\"\u002Fdownload\">下载浣熊管家\u003C\u002Fa>，扫描和分析本身不会删除任何内容。下面的演示窗口使用示例数据，仅作示意。\u003C\u002Fp>\n\u003C!--demo:analysis-->\u003Ch2 id=\"faq\">\u003Ca class=\"heading-anchor\" href=\"#faq\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>常见问题\u003C\u002Fh2>\n\u003Ch3 id=\"faq-images\">\u003Ca class=\"heading-anchor\" href=\"#faq-images\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>清理构建缓存会删掉我的镜像吗？\u003C\u002Fh3>\n\u003Cp>不会。\u003Ccode>docker builder prune\u003C\u002Fcode> 只处理构建缓存，镜像、容器和数据卷都会保留。代价是下一次构建要重新执行原本命中缓存的步骤。\u003C\u002Fp>\n\u003Ch3 id=\"faq-space-not-returned\">\u003Ca class=\"heading-anchor\" href=\"#faq-space-not-returned\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>可回收的量显示很多，为什么 Mac 的可用空间没怎么变？\u003C\u002Fh3>\n\u003Cp>空间从虚拟磁盘还给 macOS 需要一点时间，等几分钟再看。另外，RECLAIMABLE 只是估算，仍被容器使用或被其他对象共享的数据不会被删除。\u003C\u002Fp>\n\u003Ch3 id=\"faq-start-over\">\u003Ca class=\"heading-anchor\" href=\"#faq-start-over\" aria-hidden=\"true\" tabindex=\"-1\">#\u003C\u002Fa>想彻底清空重来怎么办？\u003C\u002Fh3>\n\u003Cp>从 Docker 菜单进入 \u003Cstrong>Troubleshoot\u003C\u002Fstrong>，使用 \u003Cstrong>Clean up data\u003C\u002Fstrong>。它会重置磁盘镜像，删除本机所有容器、镜像和其中的数据，设置会保留。只在你确认不需要任何本地 Docker 数据时使用。\u003C\u002Fp>\n",[16,20,23,26,30,33,36,39,42,45,48,51,54],{"depth":17,"id":18,"text":19},2,"where-docker-stores-data","Docker 的空间都在哪里",{"depth":17,"id":21,"text":22},"safe-vs-risky","哪些能删，哪些要小心",{"depth":17,"id":24,"text":25},"manual-cleanup","用命令回收空间",{"depth":27,"id":28,"text":29},3,"build-cache","构建缓存",{"depth":27,"id":31,"text":32},"images-and-containers","镜像和已停止的容器",{"depth":27,"id":34,"text":35},"volumes","数据卷",{"depth":27,"id":37,"text":38},"system-prune","一键清理的范围",{"depth":27,"id":40,"text":41},"check-disk-image","确认 Mac 上真的变小了",{"depth":17,"id":43,"text":44},"washbear","用浣熊管家清理",{"depth":17,"id":46,"text":47},"faq","常见问题",{"depth":27,"id":49,"text":50},"faq-images","清理构建缓存会删掉我的镜像吗？",{"depth":27,"id":52,"text":53},"faq-space-not-returned","可回收的量显示很多，为什么 Mac 的可用空间没怎么变？",{"depth":27,"id":55,"text":56},"faq-start-over","想彻底清空重来怎么办？","\n在 Mac 上，Docker Desktop 把镜像、容器、数据卷和构建缓存都放进同一个虚拟磁盘文件。你在访达里只能看到一个越来越大的 `Docker.raw`，看不出里面是什么。回收空间的关键，是在 Docker 内部分清哪些是可以重建的缓存、哪些是你的数据，再用 Docker 自己的命令清理，而不是去动这个文件。\n\n## Docker 的空间都在哪里 {#where-docker-stores-data}\n\nDocker Desktop 在一台轻量虚拟机里运行容器，虚拟机的磁盘默认是下面这个文件，实际位置可以在 **Settings → Resources → Advanced** 中查看。它是稀疏文件，有些工具（例如 `ls -l`）显示的是它的上限，用 `du` 才能看到真正占用了多少：\n\n```bash\n# 查看 Docker 虚拟磁盘实际占用的空间\ndu -h ~\u002FLibrary\u002FContainers\u002Fcom.docker.docker\u002FData\u002Fvms\u002F0\u002Fdata\u002FDocker.raw\n# 按类型汇总 Docker 内部的占用，需要 Docker 正在运行\ndocker system df\n# 列出每个镜像、容器、数据卷和构建缓存的明细\ndocker system df -v\n```\n\n`docker system df` 的输出分为 Images（镜像）、Containers（容器）、Local Volumes（数据卷）和 Build Cache（构建缓存）四行，RECLAIMABLE 一列是 Docker 估计可以回收的量。先看哪一行最大，再决定从哪里下手。\n\n## 哪些能删，哪些要小心 {#safe-vs-risky}\n\n| 类型 | 是什么 | 能不能删 |\n| --- | --- | --- |\n| 构建缓存 | `docker build` 留下的层和中间结果 | 可以，代价是下次构建变慢、可能重新下载依赖 |\n| 悬空镜像 | 没有标签、也不被其他镜像引用的旧层 | 可以 |\n| 未使用的镜像 | 当前没有任何容器在用的镜像 | 一般可以，需要时重新拉取；只在本机构建、没推送到仓库的镜像要先确认 |\n| 已停止的容器 | 停止但没删除的容器 | 先确认里面没有需要的文件或状态 |\n| 数据卷 | 数据库、上传文件等持久化数据 | 当作数据对待，不要为了腾空间批量删除 |\n\n> [!WARNING]\n> 不要直接删除或移动 `Docker.raw`，也不要为了让数字变小去调低磁盘镜像的上限。按 [Docker Desktop 文档](https:\u002F\u002Fdocs.docker.com\u002Fdesktop\u002Ftroubleshoot-and-support\u002Ffaqs\u002Fmacfaqs\u002F)，调低上限会删除现有磁盘镜像，所有容器和镜像都会丢失；要换存放位置，请在设置中修改，不要在访达里拖动。\n\n## 用命令回收空间 {#manual-cleanup}\n\n下面的命令都要在 Docker 运行时执行。不加 `-f` 时，Docker 会先列出要删除的内容，等你确认后才动手。\n\n### 构建缓存 {#build-cache}\n\n```bash\n# 清理悬空的构建缓存\ndocker builder prune\n# 清理所有未使用的构建缓存\ndocker builder prune --all\n# 只清理超过 7 天的未使用构建缓存\ndocker builder prune --all --filter until=168h\n```\n\n构建缓存通常是最值得先清的一块，镜像、容器和数据卷都不受影响。更多参数见 [docker builder prune 文档](https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fbuilder\u002Fprune\u002F)。\n\n### 镜像和已停止的容器 {#images-and-containers}\n\n```bash\n# 删除所有已停止的容器\ndocker container prune\n# 删除悬空镜像\ndocker image prune\n# 删除所有没有容器在用的镜像，回收最多，之后要用时需重新拉取\ndocker image prune -a\n```\n\n### 数据卷 {#volumes}\n\n```bash\ndocker volume ls\n# 默认只删除未被使用的匿名卷，命名卷会保留\ndocker volume prune\n```\n\n加上 `--all` 才会连未被使用的命名卷一起删除。命名卷里常常是数据库数据，删除前逐个确认，必要时先备份。\n\n### 一键清理的范围 {#system-prune}\n\n`docker system prune` 会一并删除已停止的容器、未被使用的网络、悬空镜像和未使用的构建缓存；加 `-a` 还会删除所有没有容器使用的镜像，加 `--volumes` 会删除未被使用的匿名卷。它省事，但范围大，执行前把 Docker 列出的清单读一遍。\n\n### 确认 Mac 上真的变小了 {#check-disk-image}\n\n清理后再运行一次 `docker system df`，并用前面的 `du` 命令查看 `Docker.raw`。按 Docker 的说明，空间还给 macOS 可能需要几分钟。如果 Docker 里已经很干净，磁盘仍然紧张，就该看看其他目录了。\n\n## 用浣熊管家清理 {#washbear}\n\n浣熊管家的[深度清理](\u002Fdocs\u002Fdeep-clean)在 **容器缓存** 类别中提供两项与 Docker Desktop 有关的内容：\n\n- **Docker 构建缓存**：扫描时读取 Docker 标记为未使用、也未被镜像共享的构建缓存，估算可清理的大小；清理时执行 `docker --context default builder prune --all --force`，镜像、容器、网络和数据卷都会保留。它需要 Docker 正在运行，否则不会出现在结果中，也不会被 **智能推荐** 预先勾选。清理后浣熊管家会再读取一次 Docker 的统计，按前后差值计算实际清理量。\n- **Docker Desktop 旧日志**：宿主机和虚拟机超过 7 天的诊断日志，标有 **低风险**，会被智能推荐预先勾选。清理前需要退出 Docker Desktop，近 7 天的日志会保留。\n\n> [!TIP]\n> 这两项对 Docker 运行状态的要求正好相反，建议分两次处理：先在 Docker 运行时清理构建缓存，再退出 Docker Desktop 清理旧日志。\n\n浣熊管家固定使用 `default` 上下文，不会跟随 `DOCKER_HOST` 或你切换到的其他上下文。镜像、容器、数据卷、`Docker.raw` 和你自建的 Buildx 构建器都不在它的处理范围内，这些请用上面的命令管理。清理直接生效、无法撤销，结果记录在[操作历史](\u002Fdocs\u002Fgetting-started#history)中。\n\n不确定空间是不是被 Docker 占用，可以用[磁盘空间分析](\u002Fdocs\u002Fdisk-analysis)打开个人资源库中的 `Containers` 文件夹，看看 `com.docker.docker` 有多大。想在自己的 Mac 上试试，可以[下载浣熊管家](\u002Fdownload)，扫描和分析本身不会删除任何内容。下面的演示窗口使用示例数据，仅作示意。\n\n::demo analysis\n\n## 常见问题 {#faq}\n\n### 清理构建缓存会删掉我的镜像吗？ {#faq-images}\n\n不会。`docker builder prune` 只处理构建缓存，镜像、容器和数据卷都会保留。代价是下一次构建要重新执行原本命中缓存的步骤。\n\n### 可回收的量显示很多，为什么 Mac 的可用空间没怎么变？ {#faq-space-not-returned}\n\n空间从虚拟磁盘还给 macOS 需要一点时间，等几分钟再看。另外，RECLAIMABLE 只是估算，仍被容器使用或被其他对象共享的数据不会被删除。\n\n### 想彻底清空重来怎么办？ {#faq-start-over}\n\n从 Docker 菜单进入 **Troubleshoot**，使用 **Clean up data**。它会重置磁盘镜像，删除本机所有容器、镜像和其中的数据，设置会保留。只在你确认不需要任何本地 Docker 数据时使用。\n",1793257450456]