Docker 在 Mac 上佔用太大?這樣安全回收空間
AskClean 團隊 · 更新於 2026-07-31
先執行 docker system df -v,確認真正佔空間的是映像、停止容器、建置快取還是磁碟區;再只清理診斷出來的類別。沒有完成備份前,不要刪除可能儲存資料的磁碟區;Docker.raw 也不能在 Finder 中手動刪除或移動。

為什麼 Docker 在 macOS 上看起來特別大
Docker Desktop 會在一個輕量 Linux 虛擬機器中執行容器。映像、容器可寫層、建置快取和磁碟區,並不是以普通資料夾形式散落在 Finder 裡,而是存進一個大型磁碟映像。根據 Docker Desktop 版本和配置,這個檔案通常叫 Docker.raw。
磁碟映像的最大容量、Finder 顯示的邏輯大小,以及 Docker 當前真正使用的空間,未必是同一個數字。稀疏檔案可以擁有很大的邏輯範圍,但只佔用部分宿主機塊。因此,應該先看 Docker 自己的統計和 macOS 剩餘空間,不能把 Finder 裡最大的數字直接當成可回收量。
手動刪除 Docker.raw 會繞過 Docker 的物件管理,可能一次摧毀所有本地映像、容器和磁碟區;直接在 Finder 中移動也可能讓 Docker Desktop 無法啟動。Docker 官方 Mac 文件明確要求透過 Settings 修改磁碟映像位置。
先做一次只讀的 Docker 儲存審計
啟動 Docker Desktop,開啟終端,執行 docker system df。它會彙總映像、容器、本地磁碟區、建置快取以及 Docker 認為可回收的空間;加上 -v,即 docker system df -v,可以看到明細。
「可回收」也要結合上下文理解。一份映像可能被多個容器共享,刪掉一個標籤不一定能釋放它顯示的全部體積;某個磁碟區目前沒有連線執行中的容器,也不代表裡面的資料庫以後不會再用。
同時開啟 Docker Desktop Settings > Resources,檢查當前版本提供的磁碟使用上限與磁碟映像位置。改動前先記錄原值。如果 Docker 已經無法啟動,在重置或重灌前,應按照 Docker 的恢復流程備份資料檔案。
- 執行 docker system df -v,並儲存帶日期的輸出。
- 執行 docker ps -a,確認哪些停止容器已經真正廢棄。
- 執行 docker image ls,把重要映像標籤對應到仍在維護的專案或 CI 流程。
- 執行 docker volume ls,確認每個可能含資料的磁碟區屬於誰、是否已有可恢復備份。
- 最後檢查建置快取,使用 docker builder du 或當前 Builder 支援的相應命令。
磁碟區沒有連線執行中容器,並不等於可以刪除。Compose 專案、停止的資料庫和臨時恢復流程都可能留下仍然重要的磁碟區。
選擇性刪除停止容器與不用的映像
確定某些停止容器已經不再需要後,可以使用 docker container rm 加容器名稱或 ID。刪除停止容器會丟掉它的可寫層變化,但預設不會刪除單獨命名的磁碟區,除非你明確要求處理磁碟區。
刪除明確不用的映像,可以執行 docker image rm 加標籤或 ID。如果 Docker 提示仍有容器引用,不要直接強制刪除,先檢查那個容器。對於頻繁重建、網路較慢的專案,保留少量昂貴的基礎映像完全合理。
分類命令比一上來 system prune 影響面更小。docker container prune 會在確認後刪除全部停止容器;docker image prune 預設只刪 dangling 映像,加 -a 後會擴大到所有未被容器引用的映像。每次都應該讀完確認摘要。
只清建置快取,不碰磁碟區資料
BuildKit 會保留建置層,讓下一次建置複用沒有變化的步驟。在活躍開發機上,建置快取可能成為最大的可回收類別,而且通常可以從 Dockerfile 與建置上下文重新生成。
預設 Builder 可以使用 docker builder prune 清理不用的建置快取;由 buildx 管理的 Builder 使用 docker buildx prune,並按當前 Docker 版本檢查可用選項。這些命令預設會詢問確認,不加 force 參數反而是一道有用的安全閘門。
清完後,下一次映像建置會更慢,也可能重新下載依賴。如果每週都發生,不應該只安排定時清快取,還要改進 Dockerfile 和快取策略:先安裝不常變化的依賴,再複製頻繁修改的原始碼;收緊 .dockerignore;給長期 CI Builder 設定明確快取預算。
執行 docker system prune 前要知道什麼
docker system prune 是一個組合清理命令。Docker 文件說明,預設會刪除停止容器、不用的網路、dangling 映像和不用的建置快取。完成前面的審查後,這個範圍可能正合適。
預設命令不會刪除磁碟區。加入 --volumes 後,範圍會擴大到匿名磁碟區,而裡面可能是真實業務或開發資料庫。不能把這個參數隨手加上,更不能從論壇複製一行命令後不看當前 Docker 版本的刪除清單。
-a 會把映像清理從 dangling 映像擴大到所有未被容器引用的映像。即使沒有資料丟失,也可能帶來很大的重新下載和建置成本。能夠識別大映像時,優先點名刪除。
- 完成只讀審計,並備份所有重要磁碟區。
- 如果問題集中在建置快取或停止容器,先單獨清理該類別。
- 只有接受確認框中全部項目時,才執行不帶 -a、--volumes 的 docker system prune。
- 重新執行 docker system df -v,並啟動重要專案做驗證。
- 等待 Docker Desktop 回收宿主機塊後,再檢查 macOS 剩餘空間。
把磁碟區和資料庫當成資料,不是快取
磁碟區的設計目標就是比容器活得更久。PostgreSQL、MySQL 或其他開發服務的磁碟區,即使相關容器已經停止或刪除,也可能儲存著唯一一份本地資料。在確認歸屬與備份前,應該把磁碟區當成文件,而不是快取。
Docker 的備份文件明確指出,磁碟區資料需要單獨備份。能使用資料庫自身匯出工具時優先使用;否則也要採用經過恢復測試的磁碟區備份流程。直接從正在執行的資料庫磁碟區裡複製一堆檔案,並不自動等於一致性備份。
在 Compose 檔案中為磁碟區取一個明確名稱,並記錄建立它的專案、恢復方式和過期時間。這樣下一次清理就是執行保留策略,而不是猜謎。
縮小、遷移或重置 Docker Desktop 儲存
清理物件後宿主機空間仍然緊張,就透過 Docker Desktop Settings 管理磁碟映像。不同版本提供的控制項可能不同,但受支援的設定介面才是調整磁碟上限或映像位置的正確入口。
不要在 Finder 裡拖動 Docker.raw。Docker 官方明確要求透過 Settings 遷移。在恢復出廠設定、解除安裝或執行破壞性的磁碟大小調整前,先匯出需要保留的映像,或確認它們能夠重新拉取;磁碟區要單獨備份,必要配置也要儲存。
刪除 Docker 物件後,宿主機空間回收可能有延遲,具體取決於磁碟映像格式和 Docker Desktop 行為。Docker 的 Mac FAQ 說明,Docker.raw 通常比舊的 qcow2 格式更快歸還宿主機空間。清理完成後先重新測量,不要立刻追加更激進的刪除。
AskClean 會做什麼,又刻意不做什麼
AskClean 可以顯示 Docker Desktop 的啟動器快取,並揭示 Docker 管理的資料在 Mac 上佔用了多少空間。它會把 Docker.raw、Docker Group Container 資料、憑據、映像和磁碟區標成「由提供方管理」或「永不預設選擇」,而不是當成普通 App 快取丟進垃圾桶。
容器物件和虛擬磁碟仍應使用 Docker 自己的 CLI 與 Settings 管理。AskClean 的作用是讓隱藏佔用可見,並阻止一次普通清理跨過憑據或磁碟區資料的邊界。安全流程應是:AskClean 找出位置,docker system df -v 做診斷,最後只清理正確類別。
Docker 各類資料的清理風險
同一個虛擬磁碟裡,既有可重建層,也有持久資料。
| 類別 | 檢查方式 | 刪除後果 |
|---|---|---|
| 建置快取 | docker system df -v / Builder 工具 | 以後重新建置或下載,不應影響磁碟區資料。 |
| 停止容器 | docker ps -a | 失去容器可寫層;單獨命名的磁碟區通常保留。 |
| 不用的映像 | docker image ls | 以後需要時必須重新拉取或建置。 |
| 磁碟區 | docker volume ls | 可能永久失去應用或資料庫的持久資料。 |
| Docker.raw | Docker Desktop Settings | 手動刪除可能抹掉全部本地 Docker 物件和磁碟區。 |
常見問題
Docker.raw 為什麼這麼大?
它是 Docker Desktop 的 Linux 虛擬磁碟,裡面包含映像、容器、快取和磁碟區。它的邏輯大小或上限可能與實際佔用的宿主機塊不同,因此要先看 docker system df -v 和 Docker Desktop Settings。
docker system prune 安全嗎?
只有在你接受它列出的全部類別時才安全:預設包括停止容器、不用的網路、dangling 映像和不用的建置快取。先審計;不了解額外下載成本和資料風險時,不要加 -a 或 --volumes。
docker system prune 會刪除磁碟區嗎?
預設不會。加入 --volumes 會擴大到匿名磁碟區。即使看起來沒有使用,磁碟區也可能儲存重要資料庫資料,刪除前必須確認歸屬並完成備份。
可以直接在 Finder 刪除 Docker.raw 嗎?
不要手動刪除或移動。這樣可能摧毀全部本地 Docker 狀態,或讓 Docker Desktop 無法啟動。物件使用 Docker CLI 管理,磁碟映像使用 Docker Desktop Settings 管理。
參考來源