MacのDocker Desktopがマルウェアで開かない対応方法

# はじめに
かけだしのバックエンドエンジニアをしているとぴ([@topi_log](https://x.com/topi_log))です。
最近話題の「MacのDocker Desktopがマルウェア判定されて動かない」問題の解決方法の一つをご紹介します。
環境や状況によってやり方異なる可能性はありますが、同じ問題に悩まされている方の一助になれば幸いです。

# 筆者環境
Macbook pro M3 / Applie Silicon / Sonoma 14.5

# 対応方法

## 1. 一旦Docker Desktopをアンインストール
- コンテナが起動している場合は全て落す
- そのあと、Activity MonitorでDocker関連を全て落とす
- Docker Desktopアプリをゴミ箱に入れ、ゴミ箱を空にする

上記3つを行います。
状況的にコンテナが動いていることはないと思いますが、もし動いていたらコマンドで落とすようにします。

## 2. バージョン4.37.2のDocker Desktopをインストール
[Docker Desktop release notes](https://docs.docker.com/desktop/release-notes/)にあるバージョン4.37.2をダウンロードしてインストールします。
※2025/01/07時点での最新バージョンです。

Appleシリコンの方は赤い方を、Intelの方は緑色の方をダウンロードしましょう。
ダウンロードしたらファイルをダブルクリックしインストールを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083959/cb637dce-49f8-8d90-c252-f7849fda95f0.png)


## 3. [Docker Systems Status Page](https://www.dockerstatus.com/)の内容を実行する
[Docker Systems Status Page](https://www.dockerstatus.com/)に対処法が書かれているので、そのとおりに実行していきます。
以下は抜粋です。
```zsh
% sudo pkill [dD]ocker
% sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist
% sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist
% sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd
% sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket
% 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/
```

## 4. Docker Desktopを起動
場合によってはPC再起動の必要があるかもしれません。
Docker Desktopが起動すればOKです！
なお、ログイン画面など表示されますがskip可能です。

# 終わり
公式の解決方法なので大体はこれで直るんじゃないかとみています。
参考になれば幸いです。


## おまけ
しっかり調べられてないのですが、一旦ChatGPTに各コマンドを解説していただきました。

### `sudo pkill [dD]ocker`：Docker関連のプロセスを全て停止
- `pkill`：指定されたプロセス名に一致するプロセスを終了
- [dD]ocker：dockerまたはDockerのどちらにも一致する正規表現

### `sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist`：Dockerの仮想ネットワークサービスを停止
- `launchctl bootout`：指定されたLaunchDaemon（macOSでのシステムサービス）を停止し、システムからアンロード
- `/Library/LaunchDaemons/com.docker.vmnetd.plist`：Dockerの仮想ネットワークデーモン（vmnetd）の設定ファイル

### ` sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist`：Dockerソケットサービスを停止
- `launchctl bootout`：Dockerソケット（com.docker.socket）に関連するサービスを停止
- `/Library/LaunchDaemons/com.docker.socket.plist`：Dockerのソケットの設定ファイル

### `sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd`：古いまたは不要になった`com.docker.vmnetd`ファイルを削除
- `rm -f`：指定されたファイルを強制的に削除
- `/Library/PrivilegedHelperTools/com.docker.vmnetd`：Docker仮想ネットワークデーモンの実行ファイル

### `sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket`：古いまたは不要になった`com.docker.socket`ファイルを削除
- `/Library/PrivilegedHelperTools/com.docker.socket`：Dockerのソケットの設定ファイル

### `sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/PrivilegedHelperTools/`：正しい場所に`com.docker.vmnetd`を配置して、後の再設定が可能になるようにする
- `cp`：コピーコマンド
- `/Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnet`：新しいバージョンのDocker仮想ネットワークデーモンの実行ファイル
- `/Library/PrivilegedHelperTools/`：システムレベルの権限（管理者権限）が必要な補助的なツールやサービスを格納している場所

### `sudo cp /Applications/Docker.app/Contents/MacOS/com.docker.socket /Library/PrivilegedHelperTools/`： Dockerソケットの正しい実行ファイルを配置
- `/Applications/Docker.app/Contents/MacOS/com.docker.socket`：新しいバージョンのDockerのソケットの設定ファイル


参考
[Docker Systems Status Page](https://www.dockerstatus.com/)