はじめに
最近、Docker Desktopのバージョンアップ後に思わぬトラブルに見舞われました。アップデート後にDocker Desktopが正常に動かなくなってしまい、「まあ、一度アンインストールして再インストールすれば解決するだろう」と軽い気持ちで試したところ...これが意外と曲者でした。
Apple Silicon搭載のMacbookでのDocker Desktopアンインストールの奮闘記をシェアします。
事の発端
ある日、いつも通り開発作業中にdocker-composeコマンドを実行しようとしたところ、突然
zsh: command not found: docker-compose
というエラーが。「あれ?おかしいな」と思い、brew list
でdockerの存在を確認したところ、リストになく、どうやらいつの間にか消えていたようです。
不思議なのは、dockerをアンインストールした記憶がまったくないこと。普段使っているし、Docker Desktopのバージョンも定期的にアップグレードしているのに、コマンドラインツールだけが消えているという謎の状況...
そしてさらに不思議なことに、Docker Desktopアプリ自体は起動するんです。でも使おうとするとエラーだらけで使い物にならない。
「よし、一旦アンインストールして再インストールしよう」そこから長い戦いが始まりました。
アンインストールの試行錯誤
まずは公式の方法でアンインストールを試みました
% /Applications/Docker.app/Contents/MacOS/uninstall
Uninstalling Docker Desktop...
Error: unlinkat /Users/**/Library/Containers/com.docker.docker/.com.apple.containermanagerd.metadata.plist: operation not permitted
権限が足りないのかな?と思い、sudoをつけて実行
**@MacBook ~ % sudo /Applications/Docker.app/Contents/MacOS/uninstall
Password:
Uninstalling Docker Desktop...
Error: unlinkat /Users/**/Library/Containers/com.docker.docker/.com.apple.containermanagerd.metadata.plist: operation not permitted
うーん、sudoでもダメか...
もしかしてDocker関連のプロセスが動いているからかな?と思い、確認してみました
**@MacBook ~ % ps aux | grep -i docker
** 37481 0.0 0.0 410059184 224 s004 R+ 12:43PM 0:00.00 grep -i docker
** 89943 0.0 0.1 411479120 22432 ?? S 11:36AM 0:00.28 /Users/**/.vscode/extensions/docker.docker-0.4.10-darwin-arm64/bin/docker-language-server-darwin-arm64 start --stdio
** 89942 0.0 0.2 1621816336 34336 ?? S 11:36AM 0:00.56 /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/**/.vscode/extensions/ms-azuretools.vscode-docker-1.29.5/dist/compose-language-service/lib/server.js --node-ipc --node-ipc --clientProcessId=23443
** 89941 0.0 0.2 1621824528 38240 ?? S 11:36AM 0:00.62 /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/**/.vscode/extensions/ms-azuretools.vscode-docker-1.29.5/dist/dockerfile-language-server-nodejs/lib/server.js --node-ipc --node-ipc --clientProcessId=23443
あ、なるほど!VSCodeでDockerのプラグインを使っていたので、そこからDockerプロセスが起動していたんですね。VSCodeを終了させて再度チャレンジ
**@MacBook ~ % ps aux | grep -i docker
** 37726 0.0 0.0 410724112 1488 s004 S+ 12:44PM 0:00.00 grep -i docker
**@MacBook ~ % sudo /Applications/Docker.app/Contents/MacOS/uninstall
Uninstalling Docker Desktop...
Error: unlinkat /Users/**/Library/Containers/com.docker.docker/.com.apple.containermanagerd.metadata.plist: operation not permitted
まだダメ...これはよりシステム的な権限の問題のようです。ここで方向転換して、Qiitaの記事を参考に権限関連の対応を試みました
sudo chflags -R nouchg ~/Library/Containers/com.docker.docker/
sudo chmod -R 755 ~/Library/Containers/com.docker.docker/
やはり権限変更もできない...。Apple Siliconマシンのセキュリティは本当に厳しいですね。
突破口を見つける
ここから「力技」でいくことにしました。
まずはDocker関連のキャッシュディレクトリを削除
rm -rf ~/Library/Caches/com.docker.docker
次に、Docker関連のシステムファイルを強制削除
sudo rm -rf /Library/PrivilegedHelperTools/com.docker.vmnetd
sudo rm -rf /Library/LaunchDaemons/com.docker.vmnetd.plist
最後に、アプリケーション自体を削除
sudo rm -rf /Applications/Docker.app
そして...ついに削除完了!複数のアプローチを組み合わせることで、しぶとく残っていたDocker関連ファイルをやっつけることができました。
再インストール
きれいさっぱりになったところで、Homebrewを使って再インストール
brew install --cask docker
これでDocker Desktopが再びきちんと動くようになりました。
あとがき
今回のトラブルは、単なるアンインストールのはずが思わぬ難所となりました。Apple Siliconマシンでのシステム権限の厳しさを改めて実感する出来事でした。
最近のmacOSはセキュリティが強化される一方で、時に私たち開発者を悩ませることがありますね。特にシステムファイルへのアクセス制限は、安全性を高める反面、こういったトラブルシューティングを難しくしています。
この記事が同じような問題で悩んでいる方の助けになれば嬉しいです。開発環境のメンテナンスって、時に予想外の時間がかかることがありますが、そんな時はゆっくり腰を据えて、一つずつ試していくのが大事だと感じました。
また、トラブルが起きた際には、コミュニティの知見(今回はQiitaの記事)を活用することも解決の糸口になります。誰かの経験が次の誰かの助けになる——そんなエンジニアコミュニティの素晴らしさを改めて感じた出来事でした。
また、Dockerについてネット検索していると興味のある記事があったのでシェアします。
-
GUIと日本語環境が使えるお手軽Docker環境の使い方
WebtopによるGUIと日本語環境を備えたDocker環境の構築方法と、AIエージェント実行などの活用例を紹介した記事。 -
Dockerで構築する機械学習環境【2024年版】
機械学習のためのDocker環境構築の意義とメリット、基本操作、便利な使い方、環境共有の方法、VS Code連携まで幅広く解説。
余談
ここからは完全な余談ですが...
Macを使うエンジニアといえばMacbook Proというイメージがありますが、実は私はAirの愛用者です。なぜかって?薄さと軽さが気に入っているんです。
正直なところ、機械学習や重たい動画編集をメインにしない開発者なら、最近のAirモデル(特にM1/M2以降)は十分すぎるほどのスペックがあると思います。たまに「Airじゃ足りないよ」と言われることもありますが、実際の開発現場でAirが原因で本当に困った場面にまだ遭遇したことがありません。
いつかPro派の方に、「これはAirだと無理だよ」と胸を張って言える具体的な開発シナリオを見せてもらいたいものです。それまでは、この薄くて軽いAirで快適に開発を続けていきます...たとえDocker関連で四苦八苦することがあっても(笑)