解決 macOS 上最近的 Docker Desktop 問題

本指南提供瞭解決影響部分 macOS Docker Desktop 使用者近期問題的步驟。該問題可能導致 Docker Desktop 無法啟動,在某些情況下,還可能觸發不準確的惡意軟體警告。有關此事件的更多詳細資訊,請參閱部落格文章

注意

Docker Desktop 4.28 及更早版本不受此問題影響。

可用解決方案

根據您的情況,有幾種可用的選項

推薦的方法是升級到最新的 Docker Desktop 版本,即版本 4.37.2。

如果可能,直接透過應用程式更新。如果不行,並且您仍然看到惡意軟體彈出視窗,請按照以下步驟操作

  1. 終止無法正常啟動的 Docker 程序

    $ sudo launchctl bootout system/com.docker.vmnetd 2>/dev/null || true
    $ sudo launchctl bootout system/com.docker.socket 2>/dev/null || true
    
    $ sudo rm /Library/PrivilegedHelperTools/com.docker.vmnetd || true
    $ sudo rm /Library/PrivilegedHelperTools/com.docker.socket || true
    
    $ ps aux | grep -i docker | awk '{print $2}' | sudo xargs kill -9 2>/dev/null
    
  2. 確保惡意軟體彈出視窗已永久關閉。

  3. 下載並安裝版本 4.37.2.

  4. 啟動 Docker Desktop。5 到 10 秒後會顯示一個特權彈出訊息。

  5. 輸入您的密碼。

現在您應該會看到 Docker Desktop 儀表板。

提示

如果在完成這些步驟後惡意軟體彈出視窗仍然存在,並且 Docker 位於廢紙簍中,請嘗試清空廢紙簍並重新執行這些步驟。

如果您使用的是 4.32 - 4.36 版本,請安裝補丁

如果您無法升級到最新版本並且看到惡意軟體彈出視窗,請按照以下步驟操作

  1. 終止無法正常啟動的 Docker 程序

    $ sudo launchctl bootout system/com.docker.vmnetd 2>/dev/null || true
    $ sudo launchctl bootout system/com.docker.socket 2>/dev/null || true
    
    $ sudo rm /Library/PrivilegedHelperTools/com.docker.vmnetd || true
    $ sudo rm /Library/PrivilegedHelperTools/com.docker.socket || true
    
    $ ps aux | grep docker | awk '{print $2}' | sudo xargs kill -9 2>/dev/null
    
  2. 確保惡意軟體彈出視窗已永久關閉。

  3. 下載並安裝與您當前基礎版本匹配的已打補丁的安裝程式。例如,如果您的版本是 4.36.0,請安裝 4.36.1。

  4. 啟動 Docker Desktop。5 到 10 秒後會顯示一個特權彈出訊息。

  5. 輸入您的密碼。

現在您應該會看到 Docker Desktop 儀表板。

提示

如果在完成這些步驟後惡意軟體彈出視窗仍然存在,並且 Docker 位於廢紙簍中,請嘗試清空廢紙簍並重新執行這些步驟。

MDM 指令碼

如果您是 IT 管理員,並且您的開發人員看到惡意軟體彈出視窗

  1. 確保您的開發人員擁有重新簽名版本的 Docker Desktop 4.32 或更高版本。

  2. 執行以下指令碼

    #!/bin/bash
    
    # Stop the docker services
    echo "Stopping Docker..."
    sudo pkill -i docker
    
    # Stop the vmnetd service
    echo "Stopping com.docker.vmnetd service..."
    sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist
    
    # Stop the socket service
    echo "Stopping com.docker.socket service..."
    sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist
    
    # Remove vmnetd binary
    echo "Removing com.docker.vmnetd binary..."
    sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd
    
    # Remove socket binary
    echo "Removing com.docker.socket binary..."
    sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket
    
    # Install new binaries
    echo "Install new binaries..."
    sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/PrivilegedHelperTools/
    sudo cp /Applications/Docker.app/Contents/MacOS/com.docker.socket /Library/PrivilegedHelperTools/
    

Homebrew casks

如果您使用 Homebrew casks 安裝了 Docker Desktop,建議的解決方案是執行完整重新安裝以解決問題。

要重新安裝 Docker Desktop,請在您的終端中執行以下命令

$ brew update
$ brew reinstall --cask docker

這些命令將更新 Homebrew 並完全重新安裝 Docker Desktop,確保您擁有已應用修復的最新版本。