Docker Desktop for Mac 常見問題

什麼是 HyperKit?

HyperKit 是在 macOS 的 Hypervisor.framework 之上構建的虛擬機器監控程式。它完全在使用者空間執行,沒有其他依賴項。

Docker 使用 HyperKit 消除了對其他虛擬機器產品(如 Oracle VirtualBox 或 VMware Fusion)的需求。

HyperKit 有什麼好處?

HyperKit 比 VirtualBox 和 VMware Fusion 更精簡,並且包含的版本是針對 Mac 上的 Docker 工作負載定製的。

Docker Desktop 將 Linux 容器和映象儲存在哪裡?

Docker Desktop 將 Linux 容器和映象儲存在 Mac 檔案系統中一個大的“磁碟映象”檔案中。這與 Linux 上的 Docker 不同,後者通常將容器和映象儲存在 /var/lib/docker 目錄中。

磁碟映象檔案在哪裡?

要找到磁碟映象檔案,請從 Docker Desktop 面板中選擇**設定**,然後從**資源**選項卡中選擇**高階**。

**高階**選項卡顯示磁碟映象的位置。它還顯示磁碟映象的最大大小以及磁碟映象實際佔用的空間。請注意,其他工具可能會以最大檔案大小而不是實際檔案大小來顯示檔案的空間使用情況。

如果檔案太大怎麼辦?

如果磁碟映象檔案太大,您可以:

  • 將其移動到更大的驅動器
  • 刪除不必要的容器和映象
  • 減小檔案的最大允許大小
如何將檔案移動到更大的驅動器?

要將磁碟映象檔案移動到其他位置:

  1. 從**資源**選項卡中選擇**設定**,然後選擇**高階**。

  2. 在**磁碟映象位置**部分,選擇**瀏覽**併為磁碟映象選擇一個新位置。

  3. 選擇**應用**以使更改生效。

重要

不要直接在 Finder 中移動檔案,因為這可能導致 Docker Desktop 無法跟蹤該檔案。

如何刪除不必要的容器和映象?

檢查您是否有任何不必要的容器和映象。如果您的客戶端和守護程序 API 版本為 1.25 或更高版本(使用客戶端上的 docker version 命令檢查您的客戶端和守護程序 API 版本),您可以透過執行以下命令檢視詳細的空間使用情況資訊:

$ docker system df -v

或者,要列出映象,請執行:

$ docker image ls

要列出容器,請執行:

$ docker container ls -a

如果存在大量冗餘物件,請執行以下命令:

$ docker system prune

此命令會刪除所有已停止的容器、未使用的網路、懸空映象和構建快取。

根據磁碟映象檔案的格式,在主機上回收空間可能需要幾分鐘。如果檔名為:

  • 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。

如何減小檔案的最大大小?

要減小磁碟映象檔案的最大大小:

  1. 從**資源**選項卡中選擇**設定**,然後選擇**高階**。

  2. **磁碟映象大小**部分包含一個滑塊,允許您更改磁碟映象的最大大小。調整滑塊以設定下限。

  3. 選擇**應用**。

當您減小最大大小時,當前的磁碟映象檔案將被刪除,因此所有容器和映象都將丟失。

如何新增 TLS 證書?

您可以將受信任的證書頒發機構 (CA)(用於驗證登錄檔伺服器證書)和客戶端證書(用於向登錄檔進行身份驗證)新增到您的 Docker 守護程序。

新增自定義 CA 證書(伺服器端)

支援所有受信任的 CA(根證書或中間證書)。Docker Desktop 會根據 Mac 鑰匙串建立所有使用者受信任的 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 才能使更改生效。

  • 登錄檔不能列為*不安全登錄檔*。Docker Desktop 會忽略列在不安全登錄檔下的證書,並且不傳送客戶端證書。諸如 docker run 等嘗試從登錄檔拉取映象的命令會在命令列以及登錄檔上生成錯誤訊息。

證書的目錄結構

如果您有此目錄結構,則無需手動將 CA 證書新增到 macOS 系統登入中:

/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 主題中的使用證書驗證儲存庫客戶端