Docker Desktop for Mac 常見問題
什麼是 HyperKit?
HyperKit 是一個基於 macOS 的 Hypervisor.framework 所建構的虛擬機器監控程式 (hypervisor)。它完全在使用者空間 (userspace) 執行,沒有其他依賴項。
Docker 使用 HyperKit 來消除對其他虛擬機器產品(如 Oracle VirtualBox 或 VMware Fusion)的需求。
HyperKit 有什麼好處?
HyperKit 比 VirtualBox 和 VMware Fusion 更輕量,且所包含的版本是專為 Mac 上的 Docker 工作負載進行過客製化的。
Docker Desktop 將 Linux 容器和映像檔存放在哪裡?
Docker Desktop 將 Linux 容器和映像檔存放在 Mac 檔案系統中的單一大型「磁碟映像」檔案內。這與 Linux 上的 Docker 不同,Linux 上通常將容器和映像檔存放在 /var/lib/docker 目錄中。
磁碟映像檔案在哪裡?
要找到磁碟映像檔案,請從 Docker Desktop 儀表板選擇 設定 (Settings),然後在 資源 (Resources) 分頁中選擇 進階 (Advanced)。
進階分頁會顯示磁碟映像的位置。它還會顯示磁碟映像的最大尺寸以及磁碟映像目前實際佔用的空間。請注意,其他工具可能會以最大檔案大小而非實際檔案大小來顯示該檔案的空間使用量。
如果檔案太大怎麼辦?
如果磁碟映像檔案太大,您可以:
- 將其移動到更大的磁碟機
- 刪除不必要的容器和映像檔
- 減少檔案的最大允許尺寸
我要如何將檔案移動到更大的磁碟機?
若要將磁碟映像檔案移動到不同位置:
選擇 設定,然後從 資源 分頁中選擇 進階。
在 磁碟映像位置 (Disk image location) 區段中,選擇 瀏覽 (Browse) 並為磁碟映像選擇一個新位置。
選擇 套用 (Apply) 以使變更生效。
重要請勿直接在 Finder 中移動檔案,因為這會導致 Docker Desktop 無法追蹤該檔案。
我要如何刪除不必要的容器和映像檔?
檢查您是否有任何不必要的容器和映像檔。如果您的用戶端和守護程式 (daemon) API 版本為 1.25 或更高版本(請使用用戶端上的 docker version 指令檢查您的用戶端和守護程式 API 版本),您可以透過執行以下指令查看詳細的空間使用資訊:
$ docker system df -v
或者,要列出映像檔,請執行:
$ docker image ls
要列出容器,請執行:
$ docker container ls -a
如果有大量冗餘物件,請執行該指令:
$ docker system prune
此指令會移除所有已停止的容器、未使用的網路、無人參照 (dangling) 的映像檔以及建置快取。
根據磁碟映像檔案的格式,在主機上回收空間可能需要幾分鐘的時間。如果檔案命名為:
Docker.raw,主機上的空間會在幾秒鐘內被回收。Docker.qcow2,空間會在幾分鐘後由背景程序釋放。
空間只有在刪除映像檔時才會釋放。在執行中的容器內刪除檔案時,空間不會自動釋放。若要隨時觸發空間回收,請執行以下指令:
$ docker run --privileged --pid=host docker/desktop-reclaim-space
請注意,許多工具會回報最大檔案大小,而非實際檔案大小。若要從終端機查詢主機上檔案的實際大小,請執行:
$ cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
$ ls -klsh Docker.raw
2333548 -rw-r--r--@ 1 username staff 64G Dec 13 17:42 Docker.raw
在此範例中,磁碟的實際大小為 2333548 KB,而磁碟的最大大小為 64 GB。
我要如何減少檔案的最大尺寸?
若要減少磁碟映像檔案的最大尺寸:
選擇 設定,然後從 資源 分頁中選擇 進階。
磁碟映像尺寸 (Disk image size) 區段包含一個滑桿,允許您變更磁碟映像的最大尺寸。調整滑桿以設定更低的限制。
選取 Apply(套用)。
當您減少最大尺寸時,目前的磁碟映像檔案將會被刪除,因此,所有容器和映像檔都會遺失。
我要如何新增 TLS 憑證?
您可以將受信任的憑證授權單位 (CA)(用於驗證登錄伺服器憑證)和用戶端憑證(用於向登錄進行身份驗證)新增至 Docker 守護程式。
新增自訂 CA 憑證(伺服器端)
支援所有受信任的 CA(根憑證或中繼憑證)。Docker Desktop 會根據 Mac 鑰匙圈 (Keychain) 建立所有使用者受信任 CA 的憑證組合,並將其附加到 Moby 受信任憑證中。因此,如果企業 SSL 憑證在主機上被使用者信任,它也會被 Docker Desktop 信任。
若要手動新增自訂的自簽憑證,請先將憑證新增至 macOS 鑰匙圈,Docker Desktop 會自動抓取該憑證。以下是一個範例:
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
或者,如果您傾向只將憑證新增至您自己的本機鑰匙圈(而不是所有使用者),請改為執行此指令:
$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt
另請參閱:憑證的目錄結構。
注意在對鑰匙圈或
~/.docker/certs.d目錄進行任何變更後,您需要重新啟動 Docker Desktop 才能使變更生效。
有關如何執行此操作的完整說明,請參閱部落格文章 將自簽登錄憑證新增至 Docker 與 Docker Desktop for Mac。
新增用戶端憑證
您可以將您的用戶端憑證放入 ~/.docker/certs.d/<MyRegistry>:<Port>/client.cert 和 ~/.docker/certs.d/<MyRegistry>:<Port>/client.key 中。
當 Docker Desktop 應用程式啟動時,它會將 Mac 上的 ~/.docker/certs.d 資料夾複製到 Moby(Docker Desktop 的 xhyve 虛擬機器)上的 /etc/docker/certs.d 目錄中。
注意
在對鑰匙圈或
~/.docker/certs.d目錄進行任何變更後,您需要重新啟動 Docker Desktop 才能使變更生效。該登錄檔不得被列為「不安全的登錄 (insecure registry)」。Docker Desktop 會忽略列在不安全登錄下的憑證,且不會傳送用戶端憑證。嘗試從該登錄檔提取 (pull) 的指令(如
docker run)會在指令列以及登錄檔端產生錯誤訊息。
憑證的目錄結構
如果您擁有此目錄結構,則無需手動將 CA 憑證新增至您的 Mac OS 系統登入鑰匙圈:
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── ca.crt
├── client.cert
└── client.key以下進一步說明與解釋了使用自訂憑證的設定:
/etc/docker/certs.d/ <-- Certificate directory
└── localhost:5000 <-- Hostname:port
├── client.cert <-- Client certificate
├── client.key <-- Client key
└── ca.crt <-- Certificate authority that signed
the registry certificate只要 CA 憑證同時也在您的鑰匙圈中,您也可以採用此目錄結構。
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
├── client.cert
└── client.key若要進一步了解如何為登錄安裝 CA 根憑證,以及如何設定用戶端 TLS 憑證以進行驗證,請參閱 Docker Engine 主題中的 使用憑證驗證儲存庫用戶端。