解除安裝 Docker Desktop,卻不丟掉你的 volume
Docker Desktop 不是單一應用程式。它包含圖形介面、背景虛擬機、連到 /usr/local/bin 的一組命令列工具,以及會悄悄長到數十 GB 的磁碟映像。拖到垃圾桶只會移除其中的圖形介面,其餘都還在。
它也跟多數解除安裝相反:執行官方解除安裝程式才是會摧毀資料的那一步,不是之後的清理。以下是能保住資料的順序,以及如何區分可丟棄的殘留與你會想保留的東西。
解除安裝會摧毀 container、image 與 volume
Docker 說得很直接:解除安裝 Docker Desktop 會摧毀本機的 container、image、volume 與其他 Docker 資料。沒有復原,也不會先進垃圾桶。沒有第二次警告。
其中多數可以重建。image 可以再 pull,container 可從 Dockerfile 重建。例外是 named volume:本機資料庫的資料就放在那裡。你用了好幾個月的 Postgres 或 MySQL container,資料列存在 volume 裡,不在 image 裡,而那個 volume 會和其他東西一起被刪掉。
在做任何事之前,先列出目前有什麼:
docker volume ls
若某個 volume 很重要,請在解除安裝前備份,不是之後:
docker run --rm -v <volume>:/from -v "$PWD":/to alpine \
tar czf /to/<volume>.tgz -C /from .
從未 push 過、自己建的東西也一樣。docker image ls 會顯示本機有什麼;若不在 registry 裡,就只存在這台 Mac 上。
若只是為了空間,你可能根本不必解除安裝
Docker 把所有東西放在一個大型虛擬磁碟映像裡,那個檔案通常是 Docker 佔用空間最大的單一項目。在 Docker 內做 pruning 往往就能拿回你要的空間,同時保留工具本身,而且還有可逆的好處。先用 docker system df 看空間分佈,再讀 在 Mac 上清理 Docker 且不遺失資料,文中涵蓋 pruning 以及磁碟檔案不會自行縮小的原因。
若你是要徹底移除 Docker,請繼續。
使用 Docker 自家的解除安裝程式
Docker 內附解除安裝程式,做的不只是刪掉套件。它會卸載背景服務,並移除用 Finder 拖曳後仍會留下的命令列符號連結。
從應用程式:開啟 Docker Desktop,點右上角的 Troubleshoot 圖示,選 Uninstall 並確認。從終端機:
/Applications/Docker.app/Contents/MacOS/uninstall
接著把 Docker 從「應用程式」移到垃圾桶。
若解除安裝程式回報 operation not permitted,Docker 文件表示可安全忽略:解除安裝其實已完成。訊息來自 macOS 保護應用程式的 container 資料夾,終端機若沒有「完整磁碟取用」權限就無法碰它。
還剩下什麼,以及各自是什麼
解除安裝程式跑完後,仍有部分資料夾會留下。Docker 點名兩個:
~/Library/Group Containers/group.com.docker
~/.docker
兩者性質不同,而差異正是重點。
~/.docker 是你的設定。它放了 context、daemon 設定,以及 docker login 的 registry 憑證。若之後要重裝 Docker,或改用 Colima、Rancher Desktop 或 OrbStack,這個資料夾可能值得保留。刪掉它等於要重新登入每個 registry。
~/Library/Group Containers/group.com.docker 與應用程式的 container 資料夾保存虛擬機狀態與磁碟映像。數十 GB 就在這裡。既然已接受 container 與 volume 都沒了,這塊才是值得移除的部分。
除了這兩個,Docker 還會留下 macOS 常見軌跡:Library 底下的快取、紀錄、偏好設定與已儲存的應用程式狀態。這些都可以丟。重點不是刪掉檔名含 docker 的每一個檔案,而是分得清哪個是快取、哪個是憑證。
確認它真的不在了
兩項檢查。第一,確認沒有東西還在跑:
pgrep -fl -i docker
第二,確認命令列工具已解除連結:
which docker docker-compose
兩者都應沒有輸出。若 docker 仍解析得到,多半是另外用 Homebrew 裝的 CLI,那是不同套件,依設計會在 Docker Desktop 解除安裝後留下。brew list | grep docker 可以確認。
更快一次看清全部
手動做法可行,但前提是你已知道哪些路徑存在、其中哪些是你的資料。這正是多數指南略過的部分,也是出錯時真正傷人的地方。
Mole 會在移除任何東西前列出應用程式留下的每個檔案,依類型分組,讓你看清資料夾實際是什麼,旁邊還有大小。你檢視清單、取消勾選要保留的,被移除的會進垃圾桶而不是直接消失。對 Docker 來說,磁碟映像通常就佔了幾乎全部可回收空間;提交前先看到那個數字,是清理與意外之間的差別。
重裝後會回來的內容
映像與容器會回來,因為它們本來就可重現:映像會重新 pull,容器會依 Dockerfile 重建。具名 volume 則不會。它們是唯一沒有其他地方副本的東西,所以先前的備份步驟才值得做。
保留 ~/.docker,registry 登入與 context 就會一併回來,省下一輪 docker login。刪掉它就得重新登入,只是多花時間,沒有其他代價。
虛擬磁碟映像會以空白狀態重建。你再次 pull 映像時它又會長大,所以解除安裝釋出的數十 GB,若你重裝並恢復平常使用,多半只是暫時的。要長期壓低這個數字,靠的是 docker system prune,不是反覆重裝。