Docker 佔用 Mac 太多空間?這樣安全回收
AskClean 團隊 · 更新於 2026-11-02
執行 docker system df -v,看看佔用 Docker 空間的是映像、已停止的容器、建置快取還是 volume。先清除診斷出來的那一類;具名 volume 的資料還沒備份之前一律保留;也絕對不要在 Finder 裡手動刪除或移動 Docker.raw。

為什麼 Docker 在 macOS 上看起來特別大
Docker Desktop 是在一台輕量的虛擬機器裡執行 Linux 容器。映像、容器的可寫入層、建置快取與 volume,都存放在一個大型磁碟映像檔裡,而不是你該在 Finder 裡動手修改的一般資料夾。依 Docker Desktop 的版本與設定不同,這個檔案通常叫做 Docker.raw。
這個檔案的容量上限、表面上的大小,以及 Docker 目前實際使用的空間,不一定是同一個數字。稀疏檔案可以保留很大的邏輯範圍,在主機上實際佔用的實體空間卻少得多。請先看 Docker 自己的統計與 macOS 的可用空間,不要以為 Finder 裡最大的那個數字馬上就能拿回來。
刪除 Docker.raw 會繞過 Docker 的物件管理,可能一次毀掉本機所有的映像、容器與 volume;在 Finder 裡移動它,也可能讓 Docker Desktop 無法正常運作。Docker 的 Mac 文件指示,要改變磁碟映像的位置,應該透過 Settings 進行。
先做一次唯讀的 Docker 儲存空間盤點
啟動 Docker Desktop,打開「終端機」,執行 docker system df。它會彙整映像、容器、本機 volume、建置快取,以及 Docker 認為可以回收的空間;加上 -v 可以看到明細:docker system df -v。
解讀「可回收」(reclaimable)時要小心。一個映像可能被好幾個容器共用,所以刪掉一個標籤,不一定能拿回它顯示的全部大小。一個 volume 可能因為目前沒有容器掛載而看似沒在用,裡面卻存著你打算日後還原的資料庫。
同時打開 Docker Desktop 的 Settings > Resources,查看你安裝的版本提供的磁碟用量上限與磁碟映像位置,變更前先記下目前的數值。如果 Docker 無法啟動,在重設或重新安裝之前,先依照 Docker 的復原程序備份 Docker 資料檔。
- 執行 docker system df -v,並把輸出連同日期一起存下來。
- 用 docker ps -a 列出容器,找出確實已經廢棄、已停止的工作。
- 用 docker image ls 列出映像,把重要的標籤對應到目前的專案或 CI 工作流程。
- 用 docker volume ls 列出 volume,確認每個存有資料的 volume 屬於誰、有沒有備份。
- 最後再用 docker builder du 或目前 builder 支援的指令檢查建置快取。
沒有任何執行中的容器掛載,不代表這個 volume 的資料可以丟。Compose 專案、已停止的資料庫,以及一次性的復原流程,經常會留下仍有用途、只是沒有掛載的 volume。
有選擇地移除已停止的容器與用不到的映像
確定不再需要的容器,用 docker container rm 加上容器名稱或 ID 刪除。移除已停止的容器會丟掉它可寫入層裡的變更,但除非你明確要求移除 volume,否則不會刪掉具名 volume。
確定用不到的映像,用 docker image rm 加上標籤或 ID 移除。如果 Docker 回報仍有容器參照它,就去檢查那個容器,而不是強制刪除。如果你經常重建、網路又慢,保留幾個下載成本高的基礎映像是合理的。
針對單一類別的指令,影響範圍比全系統的 prune 小。docker container prune 會在你確認後移除所有已停止的容器;docker image prune 預設只移除 dangling 映像,加上 -a 則擴大到沒有任何容器參照的映像。每次都要看完確認摘要。
只清除建置快取,不碰 volume
BuildKit 會保留映像層,讓重複建置時能沿用沒有變動的步驟。在頻繁開發的機器上,建置快取可能成為最大的可回收類別,而且完全可以從 Dockerfile 與建置內容(build context)重新產生。
用 docker builder prune 移除預設 builder 用不到的建置快取;由 buildx 管理的 builder 則用 docker buildx prune,並查看你的 Docker 版本支援哪些選項。除非加上 force 參數,這兩個指令都會要求確認;保留這道確認提示,是很有用的安全檢查。
下一次建置映像會比較慢,也會重新下載或重建映像層。如果每週都得這樣清,請改善 Dockerfile 與快取策略,而不是排程無條件清除:把安裝依賴的步驟放在經常變動的原始碼複製步驟之前、收緊 .dockerignore,並為長期運作的 CI builder 設定明確的快取預算。
執行 docker system prune 前先弄懂它
docker system prune 是一個方便的組合指令。根據 Docker 文件,它預設會移除已停止的容器、未使用的網路、dangling 映像與未使用的建置快取。如果你已經檢查過這幾類,這樣做可能很合適。
預設指令不會移除 volume。--volumes 選項會把清理範圍擴大到匿名 volume,而裡面可能存著真正的應用程式資料。不要隨手加上它,也不要從論壇複製一行清理指令就執行,卻沒先確認你的 Docker 版本說它會刪掉什麼。
-a 選項會把映像清除範圍從 dangling 映像擴大到所有沒被容器使用的映像。即使沒有資料遺失,也可能帶來可觀的重新下載與重建成本。如果你認得出哪些映像特別大,優先個別移除。
- 完成唯讀盤點,並備份所有資料重要的 volume。
- 如果問題能用單一類別解釋,就分別清除建置快取或已停止的容器。
- 只有在你接受確認訊息列出的每一類時,才執行不帶 -a 或 --volumes 的 docker system prune。
- 重新執行 docker system df -v,並確認重要專案仍能啟動。
- 給 Docker Desktop 一點時間歸還主機上的磁碟區塊,再檢查 macOS 的可用空間。
保護 volume 與資料庫
volume 的設計本來就是要比容器活得久。PostgreSQL、MySQL 或其他開發服務的 volume,即使相關容器已經停止或刪除,仍可能存著本機唯一的一份資料。在確認歸屬與備份之前,請把 volume 當成文件,而不是快取。
Docker 的備份說明指出,volume 的資料必須另外備份。能用資料庫內建的匯出功能時就用它,否則請採用測試過的 volume 備份流程。從執行中的資料庫 volume 直接複製出來的目錄,不見得是一致的備份。
在 Compose 檔裡為 volume 取個明確的名稱,讓歸屬一目了然,並記錄是哪個專案建立的、如何還原、何時到期。這樣以後清理時就能照保留規則決定,而不是靠猜。
縮小、搬移或重設 Docker Desktop 的儲存空間
如果清除物件後,主機的空間仍然吃緊,就透過 Docker Desktop 的 Settings 管理磁碟映像。不同版本提供的控制項不盡相同,但要改變磁碟用量上限或磁碟映像位置,正確的地方就是官方支援的設定介面。
不要在 Finder 裡把 Docker.raw 拖到別的磁碟。Docker 明確提醒要透過 Settings 搬移磁碟映像。在重設為原廠設定、解除安裝或進行具破壞性的磁碟大小調整之前,先匯出需要的映像或確認它們能重新拉取(pull),另外備份 volume,並保存你需要的設定。
視磁碟映像格式與 Docker Desktop 的行為而定,主機空間的回收可能比物件刪除慢一步。Docker 的 Mac 常見問題說明,Docker.raw 歸還主機空間的速度通常比舊的 qcow2 格式快得多。prune 完成後先重新測量,不要馬上刪除更多資料。
AskClean 會做什麼,又刻意不做什麼
AskClean 可以顯示 Docker Desktop 啟動器的快取,並指出 Docker 管理的儲存空間在主機上佔用了多少。它會刻意把 Docker.raw、Docker 的群組容器資料、憑證、映像與 volume 標示為由 Docker 自行管理或永不勾選的項目,而不是像一般 App 快取那樣刪除。
容器物件與虛擬磁碟請用 Docker 自己的 CLI 與 Settings 處理。AskClean 的角色是讓 Mac 端隱藏的佔用現形,並防止大範圍清理波及憑證或 volume 資料。安全的流程仍然是:先在 AskClean 查看,用 docker system df -v 診斷,再清除確切的那一類 Docker 資料。
Docker 各類資料的清理風險
Docker 的虛擬磁碟裡,既有可以重建的映像層,也有需要長久保存的資料。
| 類別 | 檢查方式 | 刪除後果 |
|---|---|---|
| 建置快取 | docker system df -v / builder 工具 | 會重新建置或重新下載;不應刪到任何 volume 資料。 |
| 已停止的容器 | docker ps -a | 可寫入層會遺失;具名 volume 通常會保留。 |
| 未使用的映像 | docker image ls | 之後若需要,就得重新拉取或建置。 |
| volume | docker volume ls | 長久保存的應用程式或資料庫資料可能永久遺失。 |
| Docker.raw | Docker Desktop Settings | 手動刪除可能抹掉本機所有的 Docker 物件與 volume。 |
常見問題
Docker.raw 為什麼這麼大?
它是 Docker Desktop 的虛擬磁碟,裡面裝著 Linux 端的映像、容器、快取與 volume。它的邏輯大小或上限,可能和目前實際佔用的主機磁碟區塊不同,所以動手前先看 docker system df -v 與 Docker Desktop 的 Settings。
docker system prune 安全嗎?
只有在你接受它列出的類別時才安全:預設是已停止的容器、未使用的網路、dangling 映像與未使用的建置快取。先檢查;在弄清楚額外的映像下載成本與資料風險之前,別加 -a 或 --volumes。
docker system prune 會刪除 volume 嗎?
預設不會。加上 --volumes 會把範圍擴大到匿名 volume。即使看起來沒在用的 volume,也可能存著重要的資料庫資料,刪除前請先備份並確認它屬於誰。
可以在 Finder 裡刪除 Docker.raw 嗎?
不要手動刪除或移動它。這可能毀掉本機所有的 Docker 狀態,或讓 Docker Desktop 無法正常運作。物件請用 Docker 的 CLI 處理,磁碟映像則用 Docker Desktop 的 Settings 管理。
參考來源