# Docker 占用太多磁碟空間：清理建置快取，保留映像檔與資料磁碟區

> 用 MangoDisk 查看 Docker 建置快取的預估大小，在保留映像檔、容器與資料磁碟區的前提下清理未使用快取，並了解重新建置與磁碟空間回收的差別。

**如果 Docker 的空間主要被建置快取占用，可以先清理未使用的快取，保留映像檔、容器、網路與資料磁碟區。** Docker 的 `builder prune` 就是針對建置快取的清理命令。不過，清理後下次建置可能需要重新下載相依套件或產生資料；「目前未使用」不代表「以後用不到」。[Docker 建置快取清理說明](https://docs.docker.com/reference/cli/docker/builder/prune/)

想先查看這部分占用，再決定是否清理，可以用 [MangoDisk](/tw) 的深度清理。它透過本機預設的 Docker context 讀取快取資訊，在介面中顯示預估大小；由你選擇是否執行，再交給 Docker 官方命令清理。

## 用 MangoDisk 查看 Docker 建置快取

Docker 的命令列本來就能查看與清理快取。MangoDisk 將這兩步整合到圖形介面，讓你先確認預估大小與清理影響，再決定是否勾選，不必記住各種 prune 命令的參數與範圍。

![MangoDisk Windows 繁體中文版深度清理介面，可查看清理分類與預估大小](https://assets.mangodisk.app/images/screenshots/windows/tw/light-01-deep-cleanup.jpg)

*上圖為深度清理介面示例，並非下文 Docker 檢查的截圖；實際項目依本機掃描結果而定。*

開啟[深度清理](/tw/docs/features/deep-clean)，執行**標準掃描**，在**容器快取**中查看 **Docker 建置快取**。這個項目預設不勾選，單純掃描不會刪除快取。

準備清理時：

1. 等正在執行的建置工作結束，保持 Docker 服務運作；使用 Docker Desktop 時，不要先結束它。
2. 查看建置快取的預估大小，確認可以接受之後重新建置或下載資料的成本。
3. 選擇**全部取消選取**，只勾選 **Docker 建置快取**，核對清理計畫後再確認執行。

**這個項目會保留映像檔、容器、網路與資料磁碟區，但無法依個別專案選取快取。** 目前的實作會執行 `docker --context default builder prune --all --force`，清理預設 context 下由 Docker 判定為未使用的建置快取。不能把它當成「只清某個舊專案」的功能。[MangoDisk v1.1.7 的 Docker 清理實作](https://github.com/harry0703/MangoDisk/blob/v1.1.7/src-tauri/crates/mangodisk-core/src/cleanup/cleaners/docker_build_cache.rs)

context 是 Docker 用來設定服務連線目標的組態。MangoDisk 固定使用 `default`，不會跟著目前選取的其他 context 切換；如果這個目標無法連線，就無法正常預覽。其他本機 context、自訂 Buildx builder 與遠端服務需要另外確認，不在這個項目的涵蓋範圍內。[Docker context 說明](https://docs.docker.com/engine/manage-resources/contexts/)

Docker 必須已安裝且服務可連線，才能提供快取資訊並執行清理。沒有掃描結果時，先確認服務狀態；不能因此認定 Docker 沒有占用磁碟空間。

## 預估大小不是實際釋放的空間

MangoDisk 預覽時，只加總 Docker 標記為**未使用、未共用且大小不為零**的建置快取記錄。共用資料不列入這項估算，也不能直接把所有映像檔與快取的顯示大小相加。

2026 年 10 月 9 日，在 macOS 15.7.7 上使用 Docker 29.1.3 進行唯讀檢查，取得 134 筆建置快取記錄。其中 56 筆符合上述條件，依 Docker 顯示大小加總約 **11.6 GB**。這是清理前的近似估算，沒有執行刪除，也不表示已釋放 11.6 GB。

預覽數字用來判斷是否值得清理，不是一份能逐筆勾選的快取清單。實際執行時，Docker 會依 `builder prune --all` 的規則決定可移除的未使用快取；主機最終增加多少可用空間，仍要在清理後確認。

## 分清快取與需要保留的資料

建置快取保存可重複利用的步驟結果與相關資料，減少之後建置時的重複工作。專案、相依套件或建置方式改變，快取也會跟著變化；快取很大，不一定是 Docker 出了問題。[Docker 建置快取說明](https://docs.docker.com/build/cache/)

<table>
<thead>
  <tr>
    <th>
      內容
    </th>
    
    <th>
      用途
    </th>
    
    <th>
      本文的處理方式
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      建置快取
    </td>
    
    <td>
      重複利用建置步驟與相關資料
    </td>
    
    <td>
      能接受重新建置成本時，視需要清理未使用的部分
    </td>
  </tr>
  
  <tr>
    <td>
      映像檔
    </td>
    
    <td>
      提供建立容器所需的執行環境
    </td>
    
    <td>
      保留，不隨建置快取一起清理
    </td>
  </tr>
  
  <tr>
    <td>
      容器
    </td>
    
    <td>
      執行中或已停止的應用程式實例，可能仍有需要的資料
    </td>
    
    <td>
      保留；停止不等於可以刪除
    </td>
  </tr>
  
  <tr>
    <td>
      資料磁碟區（volume）
    </td>
    
    <td>
      持續保存資料庫、上傳檔案等資料
    </td>
    
    <td>
      保留，不當成快取處理
    </td>
  </tr>
</tbody>
</table>

資料磁碟區的生命週期獨立於容器。即使目前沒有容器使用它，裡面也可能存著需要保留的資料，不能只憑「未使用」就刪除。[Docker 磁碟區說明](https://docs.docker.com/engine/storage/volumes/)

建置快取是否值得留下，也取決於接下來的工作。如果近期要反覆建置同一個專案，或需要離線作業，通常保留快取更合適。磁碟空間確實不足，而且可以重新取得相依套件時，再考慮清理。

## 用官方命令查看與清理

習慣命令列的使用者可以直接檢查同一個目標。以下命令明確指定 `default`，與前述 MangoDisk 項目一致。先查看連線設定，確認目標是本機 Docker 服務：

```sh
docker context ls
docker context inspect default
```

確認目標後，查看空間占用，必要時再展開詳細資訊。這些命令只會查詢，不會刪除：

```sh
docker --context default system df
docker --context default system df --verbose
```

比較映像檔、容器、資料磁碟區與建置快取的占用。如果資料磁碟區才是最大的一部分，清理建置快取無法解決主要問題，應先確認其中存放的資料。[Docker 空間占用命令說明](https://docs.docker.com/reference/cli/docker/system/df/)

**確認可以移除這個目標下所有未使用的建置快取，並接受重新建置的成本後**，再執行：

```sh
docker --context default builder prune --all
```

`--all` 會處理所有未使用的建置快取，不只懸空快取（dangling cache）。上面的手動命令沒有加 `--force`，會保留 Docker 本身的確認提示。清理不經過資源回收筒或垃圾桶，無法從其中還原快取；之後建置時需要重新產生相關資料。[Docker builder prune 參數說明](https://docs.docker.com/reference/cli/docker/builder/prune/)

MangoDisk 在應用程式中確認清理後使用 `--force` 執行，因此不會另外跳出終端機提示。目前這個項目沒有依快取時間篩選或設定保留容量的選項；需要這些控制時，可參考 Docker 官方參數另行處理。

只想清建置快取時，不需要改用 `system prune`。它還會處理已停止的容器、未使用的網路與映像檔；加上 `--volumes` 後，也會涉及未使用的匿名磁碟區。兩者範圍不同，不能直接替換。[Docker system prune 範圍說明](https://docs.docker.com/reference/cli/docker/system/prune/)

## 清理後確認快取與磁碟占用

完成後，在相同 context 下再次查看：

```sh
docker --context default system df
```

先比較建置快取的大小，再查看作業系統的可用磁碟空間。之後再次建置，Docker 可能重新執行部分步驟、下載相依套件並產生快取，這是正常行為。不必為了讓數字一直很小，每次建置完就清空。

使用 Mac 版 Docker Desktop 時，還要分清**磁碟映像檔的容量上限**與**實際占用**。Docker Desktop 將 Linux 容器與映像檔存放在磁碟映像檔中，有些工具顯示的是最大容量；可到 **Settings → Resources → Advanced** 查看實際占用與容量上限。[Docker Desktop Mac 儲存空間說明](https://docs.docker.com/desktop/troubleshoot-and-support/faqs/macfaqs/)

不要把 `Docker.raw` 當成一般快取檔案刪除，也不要只為了縮小顯示數字就降低磁碟映像檔的容量上限。Docker 官方說明，降低上限會刪除現有磁碟映像檔，造成容器與映像檔遺失。這已超出本文只清建置快取的範圍。

建置快取已經不大，磁碟卻仍然很滿時，可以用 MangoDisk 的[磁碟空間分析](/tw/docs/features/disk-analysis)找出其他大型資料夾。占用可能來自原始素材、舊專案的相依套件，或其他工具的建置產物，應依各自用途處理，不必反覆清同一項 Docker 快取。

其他開發工具可參考 [npm 快取與 node_modules 的差別](/tw/blog/clean-npm-cache)、[Cargo cache 與 target 資料夾的差別](/tw/blog/cargo-cache-vs-target-folder)，或從[開發者磁碟清理指南](/tw/blog/topics/developer-cleanup)繼續排查。

本文產品行為以 MangoDisk v1.1.7 為準。執行前可閱讀[安全清理指南](/tw/docs/safety)，確認清理計畫與需要保留的資料。

[下載 MangoDisk](/tw)，先查看 Docker 建置快取的預估大小，再決定是否值得清理。映像檔、容器與資料磁碟區繼續保留，是否接受下次建置的成本，由你判斷。
