AskCleanAskClean問淨

Docker 在 Mac 上佔用太大?這樣安全回收空間

AskClean 團隊 · 更新於 2026-07-31

先執行 docker system df -v,確認真正佔空間的是映像、停止容器、建置快取還是磁碟區;再只清理診斷出來的類別。沒有完成備份前,不要刪除可能儲存資料的磁碟區;Docker.raw 也不能在 Finder 中手動刪除或移動。

Docker 儲存中分佈著容器、映像層、建置快取,以及一份受保護的磁碟區資料
一個虛擬磁碟裡既有可重建快取,也有持久資料;清理前必須分開檢查。

為什麼 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 的恢復流程備份資料檔案。

  1. 執行 docker system df -v,並儲存帶日期的輸出。
  2. 執行 docker ps -a,確認哪些停止容器已經真正廢棄。
  3. 執行 docker image ls,把重要映像標籤對應到仍在維護的專案或 CI 流程。
  4. 執行 docker volume ls,確認每個可能含資料的磁碟區屬於誰、是否已有可恢復備份。
  5. 最後檢查建置快取,使用 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 映像擴大到所有未被容器引用的映像。即使沒有資料丟失,也可能帶來很大的重新下載和建置成本。能夠識別大映像時,優先點名刪除。

  1. 完成只讀審計,並備份所有重要磁碟區。
  2. 如果問題集中在建置快取或停止容器,先單獨清理該類別。
  3. 只有接受確認框中全部項目時,才執行不帶 -a、--volumes 的 docker system prune。
  4. 重新執行 docker system df -v,並啟動重要專案做驗證。
  5. 等待 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.rawDocker 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 管理。

參考來源

繼續清理開發者儲存