# Docker Desktop 的磁盘映像太大了：如何在 Mac 上缩小 Docker.raw

> 为什么 Docker.raw 看起来那么大、如何测量它的真实大小、哪些 prune 命令能释放空间并保留卷，以及何时该限制或移动它。

- URL: https://moreroom.app/zh-Hans/learn/docker-desktop-disk-image
- Published: 2026-10-17
- Updated: 2026-10-17
- Publisher: MoreRoom (Yando Pte. Ltd.) — https://moreroom.app

## TL;DR

- Docker Desktop 把所有镜像、容器、卷和构建缓存都放在同一个磁盘映像 Docker.raw 中，位于 ~/Library/Containers/com.docker.docker 内。
- Docker.raw 是稀疏文件：访达和 ls -l 显示的是它的最大大小，而 du 显示的是它实际占用的空间。
- 请在 Docker 内部用 docker system prune 缩小它，而不是删除这个文件。释放的空间几分钟内就会还给 macOS。
- docker system prune 默认保留卷，除非加上 --volumes；即使加上，也只会移除匿名卷。
- 调低磁盘使用上限或使用 Clean up data 都会抹掉整个磁盘映像，请把它们当作最后手段。

Mac 版 Docker Desktop 在一个小型虚拟机中运行 Linux 容器，而这台虚拟机把**所有内容都存放在一个名为 `Docker.raw` 的磁盘映像文件中**：镜像、容器、卷和构建缓存。这个文件可能增长到几十 GB。解决办法不是删除它，而是**在 Docker 内部执行清理（prune**）；随后 Docker Desktop 会把释放的空间还给 macOS。

截至 2026 年 10 月，本文内容适用于在 macOS 27 Golden Gate、26 Tahoe、15 Sequoia 和 14 Sonoma 上运行的当前 Docker Desktop 版本。

## Docker.raw 在哪里，实际有多大

默认情况下，这个[磁盘映像](https://moreroom.app/glossary#docker-raw)位于：

```sh
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
```

如果你移动过它，可以在 **Docker Desktop › Settings › Resources › Advanced** 中查看当前位置。

`Docker.raw` 是一个[稀疏文件](https://moreroom.app/glossary#sparse-file)。它的逻辑大小是磁盘映像所能达到的最大值，但只有 Docker 实际写入过的数据块才会占用 Mac 上的空间。访达和 `ls -l` 显示的是最大值，所以这个文件看起来可能大得吓人。要查看真实数字：

```sh
cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
ls -klsh Docker.raw
du -h Docker.raw
```

在 `ls -s` 的输出中，第一个数字是实际分配的空间；大小那一列显示的是最大值。`du` 只报告已分配的空间。Docker 官方的 [Mac 常见问题](https://docs.docker.com/desktop/troubleshoot-and-support/faqs/macfaqs/)也是用同样的 `ls -klsh` 来检查的。

![稀疏的 Docker.raw 文件：由磁盘使用上限决定的逻辑大小，与 Mac 上实际分配的数据块对比](https://moreroom.app/learn/img/docker-desktop-disk-image-sparse.svg)

## 查看空间被谁占用

在 Docker Desktop 运行时，让 Docker 给出明细：

```sh
docker system df
docker system df -v
```

第一条命令会列出 **Images**、**Containers**、**Local Volumes** 和 **Build Cache**，附带总大小，以及表示未在使用部分的 **RECLAIMABLE** 列。`-v` 版本会逐一列出每个镜像、容器和卷，便于你发现某个被遗忘的 10 GB 镜像，或旧项目留下的大卷。

## 由浅入深地清理

以下所有命令都是永久删除：Docker 对象没有废纸篓。镜像可以重新拉取或构建，卷则不行。

### 构建缓存

如果你在本地构建镜像，构建缓存往往是最大的一项。

```sh
docker builder prune
```

它会请求确认，然后移除未使用的构建缓存。加上 `--all` 可以清理得更彻底。在缓存重新填满之前，后续构建会花更长时间。

### 已停止的容器、未使用的网络和镜像

```sh
docker system prune
docker system prune -a
```

不带参数的 `docker system prune` 会移除已停止的容器、没有被任何容器使用的网络、悬空（未加标签的）镜像，以及未使用的构建缓存。加上 `-a` 后，还会移除**所有没有被至少一个容器使用的镜像**，通常释放的空间最多。之后需要的内容会被重新拉取或构建。请参阅 Docker 的[清理指南](https://docs.docker.com/engine/manage-resources/pruning/)和 [`docker system prune` 参考文档](https://docs.docker.com/reference/cli/docker/system/prune/)。

### 卷：先检查，再移除

卷中保存的是无法重建的数据，例如本地数据库。这正是 Docker 默认从不移除卷的原因。

```sh
docker volume ls
docker volume rm <name>
```

`docker system prune --volumes` 只会额外移除没有被任何容器使用的**匿名**卷。`docker volume prune` 的行为相同；`docker volume prune --all` 还会移除没有容器在用的**具名**卷。请先备份所有重要数据。

| 命令 | 容器 | 镜像 | 构建缓存 | 卷 |
|---|---|---|---|---|
| `docker system prune` | 已停止的 | 仅悬空镜像 | 未使用的 | 保留 |
| `docker system prune -a` | 已停止的 | 所有未使用的 | 未使用的 | 保留 |
| `docker system prune -a --volumes` | 已停止的 | 所有未使用的 | 未使用的 | 未使用的匿名卷 |
| `docker volume prune --all` | — | — | — | 所有未使用的 |

## 空间没有回来时

清理释放的是虚拟机内部的数据块，Docker Desktop 会在后台把它们交还给 macOS。Docker 提到这可能需要几分钟。请再次用 `du -h Docker.raw` 检查。如果过了一段时间数字仍没有变化，请退出并重新打开 Docker Desktop。

无论文件内部发生什么，访达都会一直显示它的最大大小，所以请用 `du` 而不是访达来判断进展。

## 限制或移动磁盘映像

在 **Settings › Resources › Advanced** 中，较新的版本把这个设置叫作 **Disk usage limit**（旧版本叫 **Disk image size**）。它决定磁盘映像最多能增长到多大。Docker 的 Mac 常见问题提醒，**减小最大值会删除当前的磁盘映像**，其中的所有镜像、容器和卷都会随之消失。请先清理、导出需要的内容，然后再调低它。

同一面板中还有 **Disk image location**。使用其中的 **Browse** 按钮，可以把 `Docker.raw` 移到更大的内置宗卷或外置 SSD 上。不要在访达中移动这个文件：Docker Desktop 可能会找不到它。

## 重置选项

Docker Desktop 的 **Troubleshoot** 界面（从菜单栏中的鲸鱼菜单打开，或点按 Dashboard 右上角附近的问号图标）中有 **Clean up data**，旧版本中叫 **Clean / Purge data**。根据 [Docker 的故障排除页面](https://docs.docker.com/desktop/troubleshoot-and-support/troubleshoot/)，它会销毁所有本地容器和镜像，同时保留你的设置。由于卷也存放在同一个磁盘映像中，请假定它们也会一并消失。只有在你愿意从头开始时才使用它。

同一菜单中的 **Reset to factory defaults** 还会重置所有设置。

## 以不同方式管理磁盘空间的替代方案

- **OrbStack** 把容器、镜像和 Linux 虚拟机存放在 `~/Library/Group Containers/HUAQ24HBR6.dev.orbstack/data` 中。其[文档](https://docs.orbstack.dev/)介绍了动态磁盘管理，用量会按需增减。请在 OrbStack 中或用同样的 `docker` 命令清理；删除数据文件会丢失其中的一切。
- **Colima** 是一款免费的命令行运行时，把虚拟机存放在 `~/.colima` 中。`docker` 的 prune 命令用法相同，`colima prune` 会清除 Colima 缓存的下载文件，`colima delete` 则会移除一个配置文件及其全部数据。

两者都使用标准的 `docker` 命令行工具，因此上文关于清理、卷和构建缓存的内容同样适用。

## MoreRoom 能帮你做什么

MoreRoom 免费版会找到 Docker Desktop 的磁盘映像，标注为“请先检查”，并提醒你应当执行清理，而不是删除这个文件。当你选择清理时，MoreRoom 会运行 Docker 自己的 `docker system prune --all --force`：已停止的容器、未使用的网络、未使用的镜像和构建缓存会被移除，**卷会被保留**。这条命令是永久性的，并会明确标注。MoreRoom 也能识别 OrbStack 和 Colima 的数据，同样标注为“请先检查”。

MoreRoom 不会删除 `Docker.raw`，不会移除卷，也不会更改 Docker 的磁盘使用上限。Pro 还提供“收集器”（一次清理多个项目）和目标模式。

## FAQ

### 可以删除 Docker.raw 吗？

可以，但其中的所有镜像、容器和卷都会丢失，Docker Desktop 会新建一个空文件。请改为在 Docker 内部执行清理。如果你确实想从头开始，请使用 Docker Desktop 的 Troubleshoot 菜单中的 Clean up data，它会保留你的设置。

### 为什么访达显示的 Docker.raw 比 Docker 报告的大得多？

Docker.raw 是稀疏文件。访达和 ls -l 显示的是由磁盘使用上限决定的最大大小，而 du 和 ls -s 显示的是实际写入磁盘的数据块。

### docker system prune 会删除我的卷吗？

默认不会。加上 --volumes 后，它还会移除没有被任何容器使用的匿名卷。具名卷（例如你创建的数据库卷）只有用 docker volume prune --all 或 docker volume rm 才会被移除。

### 为什么清理后可用空间没有增加？

Docker Desktop 会在后台把释放的空间还给 macOS，可能需要几分钟。请再次对 Docker.raw 运行 du -h 查看。如果数字没有变化，请重新启动 Docker Desktop。另外，只有镜像真正被删除时空间才会释放，仅仅取消标签是不够的。

### 调低磁盘使用上限安全吗？

只有在你可以接受丢失其中内容时才安全。Docker 的 Mac 文档提醒，减小最大大小会删除当前磁盘映像，连同其中所有镜像、容器和卷。
