Docker Desktopがマルウェア扱いされて起動できなくなってしまうトラブルが起きました。
直前まで使っていたのに急にエラーが出て焦ったのですが、なんとか解決できたので覚書です。
合わせて、推奨される方法もメモしておきます。同様のトラブルが起きているようなので、参考になれば幸いです。
経緯
問題が起きたのは2025年1月10日、複数のプロジェクトでdocker-compose up
を使って作業をしていました。朝からプロジェクトAで作業し、途中でプロジェクトBに切り替え、夕方に再びプロジェクトAを起動しようとしたところ、ターミナルに次のエラーが出ました。
zsh: killed docker-compose up
このエラーは通常、システムがリソースを使い果たした際に発生することがあるらしく、一旦他のアプリケーションを終了させてみましたが改善されず、PCを再起動してみることに。
PC再起動後にDocker Desktopを起動しようとすると、以下の内容の警告ウィンドウが表示されました。
“Docker”を開くとコンピュータが破損します。ゴミ箱に入れる必要があります。
これは「ゴミ箱に入れる」ではなく「キャンセル」を選択しました。が、その後何度も警告文が出て埒が開かないので意を決してDockerをゴミ箱に入れることに…
以下のような警告も続けて表示されました。
“com.docker.socket”を開くとコンピュータが破損します。
“com.docker.vmnetd”を開くとコンピュータが破損します。
これらに関しては、「Finderに表示」を選択。Docker関連のバイナリファイルが残っていました。
解決方法を探していると、「Docker Desktopがマルウェアとして検出される問題が発生している」との情報を見つけました。
解決までにやったこと
結論から言うと、Malware detection prevents Docker Desktop to start #7527の回避策を実施することで解決できます。
初めからここに行き着いていれば苦労することもヒヤヒヤすることもなかったかも…「まず、公式フォーラムやGitHubのDocker for Mac Issuesを参照して同様のエラーがないか確認する」を学びました
1. 警告が出たDocker関連データを削除
私の場合、前述の通りDockerを削除せざるを得ない状況になってしまったので、Docker Desktopを再インストールするべく下記の通り、手動で削除しました。
・Docker(PC再起動時に削除済)
・/Library/PrivilegedHelperTools/com.docker.socket
・/Library/PrivilegedHelperTools/com.docker.vmnetd
・Docker Desktopアプリケーション
*この手順は不要な場合もあるようです。再インストールの必要があるかどうかの診断を行う手順が回避策の準備として組み込まれているので、そこで必要な手順を踏んでください。
推奨される方法
今回は手動で削除しましたがDocker Desktopは手動削除よりも公式提供のスクリプトやアンインストール手順を使うのが安全で効率的です。
/Applications/Docker.app/Contents/MacOS/Docker --uninstall
アンインストールしたら関連する残存データとキャッシュをクリーンアップします。
rm -rf ~/Library/Group\ Containers/group.com.docker
rm -rf ~/Library/Containers/com.docker.*
rm -rf /Library/Application\ Support/Docker\ Desktop
rm -rf /Library/LaunchDaemons/com.docker.*
rm -rf /Library/PrivilegedHelperTools/com.docker.*
私は警告文が出た二つのデータのみ削除しましたが、システムの混乱やデータの不整合を避けるためには、バックアップを取得した後に全てクリーンにすべきでした。
2. Docker Desktopを再インストール
最新バージョンのDocker Desktopを公式サイトからダウンロードしてインストールしました。
3. 公式の回避策を実施する
今回はデスクトップ上にファイルを作成し、そこに公式のスクリプトを記述しました。
code ~/Desktop/fix_docker.sh
#!/bin/bash
# Stop the docker services
echo "Stopping Docker..."
sudo pkill '[dD]ocker'
# 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 "Installing 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/
以下のコマンドで、作成したスクリプトに実行権限を付与します。
chmod +x ~/Desktop/fix_docker.sh
以下のコマンドで、スクリプトを実行します。
sudo ~/Desktop/fix_docker.sh
完了したら、Docker Desktopを再起動して正常に動作するか確認します。
私の場合…
echo
のメッセージが表示されずにPCが再起動してしまったので、正しく実行されたかどうかを以下の手順で確認しました。
1. 削除したファイルの確認
ls -l /Library/PrivilegedHelperTools/com.docker.vmnetd
ls -l /Library/PrivilegedHelperTools/com.docker.socket
実行結果はファイルが「存在しない」ということで、削除は成功しているようです。
2. スクリプトの最終実行状況を確認
sudo launchctl list | grep docker
何も表示されないのでサービスは停止されている。
ここまで確認したところでスクリプトの実行は成功しているようだったので、Docker Desktopを起動してみたところ正常に起動できました。
ここで改めてdocker-compose up
を実行すると問題なくコンテナが起動し、これまで通りローカル環境で作業ができるようになりました。
最後に
今回、初手の再起動によって無駄な手順が生まれたり、手動削除によって依存ファイルが残る可能性が生まれたりと、最適とは言えない方法でしたが何とか解決することができました。
行き当たりばったりの対処ログでお恥ずかしい限りですが、同様の現象に困っている方のお役に立てれば幸いです。