Docker Desktop 的疑難排解主題
提示
如果在疑難排解中找不到解決方案,請瀏覽 GitHub 儲存庫或建立新的問題
適用於所有平台的主題
確保憑證已正確設定
Docker Desktop 會忽略不安全儲存庫下列出的憑證,且不會將用戶端憑證傳送給它們。 嘗試從儲存庫提取映像檔的指令(例如 docker run
)會在命令列上產生錯誤訊息,如下所示:
Error response from daemon: Get http://192.168.203.139:5858/v2/: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
以及在儲存庫上。 例如:
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52882: tls: client didn't provide a certificate
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52883: tls: first record does not look like a TLS handshake
Docker Desktop 的 UI 顯示為綠色、扭曲或出現視覺偽影
Docker Desktop 預設使用硬體加速圖形,這可能會導致某些 GPU 出現問題。 在這種情況下,Docker Desktop 將會成功啟動,但某些畫面可能會顯示為綠色、扭曲或出現一些視覺偽影。
要解決此問題,請在 Docker Desktop 的 settings-store.json
檔案(或 Docker Desktop 4.34 及更早版本的 settings.json
)中建立 "disableHardwareAcceleration": true
項目來停用硬體加速。 你可以在以下位置找到此檔案:
- Mac:
~/Library/Group Containers/group.com.docker/settings-store.json
- Windows:
C:\Users\[USERNAME]\AppData\Roaming\Docker\settings-store.json
- Linux:
~/.docker/desktop/settings-store.json
更新 settings-store.json
檔案後,請關閉並重新啟動 Docker Desktop 以套用變更。
適用於 Linux 和 Mac 的主題
掛載磁碟區需要針對 $HOME
以外的任何專案目錄進行檔案共享
如果你正在使用掛載的磁碟區,並且收到執行階段錯誤,指出找不到應用程式檔案、拒絕存取磁碟區掛載或服務無法啟動(例如使用 Docker Compose 時),你可能需要開啟 檔案共享。
掛載磁碟區需要針對位於 /home/<user>
目錄以外的專案使用共享磁碟機。 從「設定」中,選擇「資源」,然後選擇「檔案共享」。 共享包含 Dockerfile 和磁碟區的磁碟機。
Docker Desktop 無法在 MacOS 或 Linux 平台上啟動
在 MacOS 和 Linux 上,Docker Desktop 會建立用於行程間通訊的 Unix 網域通訊端。
如果任何這些 socket 的絕對路徑長度超過作業系統限制(MacOS 為 104 個字元,Linux 為 108 個字元),Docker 將無法啟動。這些 socket 建立在使用者的家目錄下。如果使用者 ID 長度導致 socket 的絕對路徑超過作業系統的路徑長度限制,則 Docker Desktop 無法建立 socket 並且無法啟動。解決方法是縮短使用者 ID,我們建議在 MacOS 上最大長度為 33 個字元,在 Linux 上最大長度為 55 個字元。
以下是 MacOS 上的錯誤範例,指出啟動失敗是由於超過上述的作業系統限制所致
[vpnkit-bridge][F] listen unix <HOME>/Library/Containers/com.docker.docker/Data/http-proxy-control.sock: bind: invalid argument
[com.docker.backend][E] listen(vsock:4099) failed: listen unix <HOME>/Library/Containers/com.docker.docker/Data/vms/0/00000002.00001003: bind: invalid argument
適用於 Mac 的主題
偵測到不相容的 CPU
Docker Desktop 需要支援虛擬化的處理器 (CPU),更具體地說,需要支援 Apple Hypervisor framework。Docker Desktop 僅與 CPU 支援 Hypervisor framework 的 Mac 系統相容。如 Apple Hypervisor Framework 文件中關於支援的硬體所述,大多數 2010 年及之後生產的 Mac 都支援它。
一般來說,支援包含延伸分頁表 (EPT) 和非限制模式的 Intel VT-x 功能集的機器都受支援。
若要檢查您的 Mac 是否支援 Hypervisor framework,請在終端機視窗中執行以下指令。
$ sysctl kern.hv_support
如果您的 Mac 支援 Hypervisor Framework,該指令會顯示 kern.hv_support: 1
。
如果不支援,該指令會顯示 kern.hv_support: 0
。
另請參閱 Apple 文件中的 Hypervisor Framework 參考。
VPNKit 持續中斷
在 Docker Desktop 4.19 版中,gVisor 取代了 VPNKit,以增強在 macOS 13 及更高版本上使用虛擬化架構時的 VM 網路效能。
要繼續使用 VPNKit,請將 "networkType":"vpnkit"
新增到位於 ~/Library/Group Containers/group.com.docker/settings-store.json
的 settings-store.json
檔案中。
適用於 Windows 的主題
磁碟區
共用磁碟區的資料目錄權限錯誤
從 Windows 共用檔案時,Docker Desktop 會將 共用磁碟區 的權限設定為預設值 0777。
磁碟區掛載需要 Linux 容器的共用資料夾
如果您正在使用掛載的磁碟區,並且收到執行階段錯誤,指出找不到應用程式檔案、拒絕存取磁碟區掛載或服務無法啟動(例如使用 Docker Compose 時),您可能需要開啟 共用資料夾。
使用 Hyper-V 後端時,從 Windows 掛載檔案需要 Linux 容器的共用資料夾。從**設定**中,選擇**共用資料夾**並共用包含 Dockerfile 和磁碟區的資料夾。
符號連結支援
符號連結在容器內部和跨容器運作。如需詳細資訊,請參閱 符號連結在 Windows 上如何運作?。
避免非預期的語法錯誤,請對容器中的檔案使用 Unix 樣式換行符號
任何要在容器內執行的檔案都必須使用 Unix 樣式 \n
換行符號。這包括在建置的指令列和 Docker 檔案中 RUN 指令所參考的檔案。
Docker 容器和 docker build
在 Unix 環境中執行,因此容器中的檔案必須使用 Unix 樣式換行符號:\n
,*而不是* Windows 樣式:\r\n
。使用 Windows 工具撰寫檔案(例如 shell 指令碼)時,請記住這一點,因為預設值可能是 Windows 樣式換行符號。這些指令最終會傳遞給基於 Unix 的容器內的 Unix 指令(例如,傳遞給 /bin/sh
的 shell 指令碼)。如果使用 Windows 樣式換行符號,docker run
將因語法錯誤而失敗。
有關此問題和解決方案的範例,請參閱 GitHub 上的此問題:Docker RUN 無法執行 shell 指令碼