空間在哪裡
在 macOS 上,Docker Desktop 執行一台 Linux 虛擬機,而那台虛擬機的整個檔案系統就是你 Mac 上的一個稀疏檔案:
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
請查看它在磁碟上的實際大小 — 而不是邏輯大小,那永遠是你允許 Docker 使用的上限:
du -h -d0 ~/Library/Containers/com.docker.docker/Data/vms/0/data/
為什麼刪除映像檔不會讓它變小
移除一個映像檔會釋放虛擬機檔案系統 內部的 區塊,但你 Mac 上的那個檔案仍維持原本大小 — 它早已把那些空間從 macOS 拿走了。較新版本的 Docker Desktop 會從虛擬機內部發出 TRIM,讓 macOS 得以回收被釋放的區塊,但這是照 Docker 自己的時程進行,而不是你 prune 的那一刻。在那之前, docker system df 會回報釋放了好幾 GB,而 Finder 完全看不出任何變化。
把空間拿回來
依序排列:破壞性最低的先做。
1. 看看 Docker 認為自己用了多少
永遠從這裡開始。它會把映像檔、容器、磁碟區與建置快取分開列出,並告訴你各有多少可以回收。
docker system df -v
2. 清空建置快取
在經常建置映像檔的機器上,這通常是最大的單一項目,也是移除起來最安全的 — 只會讓下一次建置變慢而已。
docker builder prune -a
3. 清理真正沒在用的東西
已停止的容器、懸空的映像檔與未使用的網路:
docker system prune
加上 -a 就會連同任何未被執行中容器使用的映像檔一併移除 — 這代表之後要重新拉取。以下這個選項, --volumes 只有在你確定時才加上: 磁碟區正是資料庫存放資料的地方,而那是這一頁上唯一會摧毀你無法重新下載之物的指令。
4. 動手前先列出磁碟區
看看實際上會消失哪些:
docker volume ls
docker volume ls -f dangling=true
Docker 很少是唯一的問題
你可以把這一頁上的每個指令都跑一遍,但在同一台 Mac 上,Xcode 的 DerivedData 和幾個被遺忘的模型權重通常一樣大。Bytesweep 會在一次十秒的掃描中,把 Docker 在磁碟上的實際大小與這些一併量出來,讓你把磁碟一次整理好,而不是一個工具一個工具地追。
5. 讓 macOS 收回這個檔案
prune 之後,Docker Desktop 有一個官方做法可以把釋放的區塊還回去: 設定 → 資源 → 進階 → 磁碟使用量,或是結束並重新開啟 Docker Desktop,它會在啟動時觸發 TRIM。給它一分鐘,重新確認檔案大小之後,再判斷是否沒有效果。
6. 調低磁碟上限
在 設定 → 資源中,虛擬磁碟上限就是 Docker.raw 被允許成長到多大。調低它本身不會釋放任何空間,但能為問題設下天花板。當初「以防萬一」把它調高,正是那個檔案長到 64 GB 的原因。
7. 最後手段
設定 → 疑難排解 → Clean / Purge data 會完全重設虛擬機的磁碟,把檔案還原到接近零。它會刪掉你所有的映像檔、容器與磁碟區。在其他方法都無效、而且你清楚磁碟區裡有什麼的時候再用。
不要在 Finder 裡刪除 Docker.raw。 它不是快取檔案 — 它是整個 Docker 安裝的資料,而在 Docker 執行中移除它,可能讓虛擬機留在一個反正也需要重設的狀態。
也值得看看
Docker 很少是單獨存在的
在 Docker 長到 50 GB 的那台 Mac 上,Xcode 的 DerivedData 與本機 AI 模型通常緊追在後。如果你要回收空間,把整顆磁碟量過一次,比一次修一樣東西更值得。 完整清單 →
在 Linux 上沒有映像檔案
在 Linux 上,Docker 直接寫入下列位置, /var/lib/docker所以 prune 會立刻釋放空間,上述 TRIM 的問題完全不適用。 Linux 磁碟整理 →
把 Docker 和其他所有東西擺在一起看
Bytesweep 會量出 Docker 在磁碟上的實際大小,把它和 Xcode、模擬器、node_modules 與模型權重並列,並標出哪些可以安心清除 — 而且完全不動你的磁碟區。
常見問題
刪除 Docker.raw 安全嗎?
從 Finder 刪不安全,Docker 執行中也不安全。那單一檔案就是你所有的映像檔、容器與磁碟區。如果你真的想重新開始,請用 Docker Desktop 的「疑難排解 → Clean / Purge data」,它會以 Docker 知情的方式做同一件事。
為什麼 docker system prune 說釋放了 20 GB,卻什麼都沒變?
因為它是在虛擬機的檔案系統裡釋放了 20 GB,不是在你的 Mac 上。在 TRIM 執行、macOS 回收那些區塊之前,檔案都會維持原本大小。結束並重新開啟 Docker Desktop 通常就會觸發。
docker system prune 會刪掉我的資料庫嗎?
只有在你加上 --volumes的時候。沒有這個旗標,它不會動磁碟區。加上之後,任何未連接到容器的磁碟區都會消失,而已停止的資料庫,其磁碟區就算是未連接。
Docker.raw 應該多大才合理?
沒有標準答案,但在有幾個進行中專案的機器上,15 到 25 GB 算正常,而 60 GB 表示建置快取從來沒清過。請先用下列指令確認: docker system df -v ,再斷定是映像檔的問題。
