他のOSでも同じような代替手段は用意されているとは思いますが、 macOSでDockerをインストールする方法の一つにHomebrewを使う方法があります。
Homebrewがセットアップ済み であれば、これでそれぞれインストールできます。 ちなみにDocker Desktopを入れる場合は、Docker CLIを入れる必要はありません。
brew install docker #Docker CLI brew install --cask docker #Docker Desktop for mac
一方で、Docker Desktopを再インストールしたい時というパターンがあるかもしれません。 Docker Desktopが不明なエラーのせいで起動しなくなったとか、/usr/local/bin/のリンクファイルを誤って上書きしてしまった時とか。
一旦削除してインストールしようと次のようなコマンドを実行すると、何か色々なエラーが起きてしまってインストールもできなくなってしまいました。 これは困りました。
brew uninstall --cask docker brew install --cask docker
次のようなエラーが対処してインストールすると順番に現れて面倒です。 特に最後のやつは消してから実行しても「docker.fish」が存在するエラーが現れてインストールを続行できなくなります。 今度こそ詰んだのでしょうか?
==> Purging files for version 4.21.1,114176 of Cask docker Error: It seems there is already a Binary at '/opt/homebrew/etc/bash_completion.d/docker'. ==> Purging files for version 4.21.1,114176 of Cask docker Error: It seems there is already a Binary at '/opt/homebrew/share/zsh/site-functions/_docker'. ==> Purging files for version 4.21.1,114176 of Cask docker Error: It seems there is already a Binary at '/opt/homebrew/share/fish/vendor_completions.d/docker.fish'.
エラーで調べたところ、次のようなIssueを見つけました。
要約すると、--forceをつけて全部削除してインストールし直すだけで解決できるようです。
brew uninstall --cask docker --force brew install --cask docker
アンインストールを実行すると、次のような処理が行われるようです。
$ brew uninstall --cask docker --force ==> Uninstalling Cask docker ==> Removing launchctl service com.docker.helper Password: ==> Removing launchctl service com.docker.socket ==> Removing launchctl service com.docker.vmnetd ==> Removing files: /Library/PrivilegedHelperTools/com.docker.socket /Library/PrivilegedHelperTools/com.docker.vmnetd ==> Removing directories if empty: ==> Backing App 'Docker.app' up to '/opt/homebrew/Caskroom/docker/4.21.1,114176/Docker.app' ==> Removing App '/Applications/Docker.app' ==> Unlinking Binary '/usr/local/bin/docker' ==> Unlinking Binary '/usr/local/bin/docker-compose' ==> Unlinking Binary '/usr/local/bin/docker-compose-v1' ==> Unlinking Binary '/usr/local/bin/docker-credential-desktop' ==> Unlinking Binary '/usr/local/bin/docker-credential-ecr-login' ==> Unlinking Binary '/usr/local/bin/docker-credential-osxkeychain' ==> Unlinking Binary '/usr/local/bin/docker-index' ==> Unlinking Binary '/usr/local/bin/hub-tool' ==> Unlinking Binary '/usr/local/bin/kubectl.docker' ==> Unlinking Binary '/opt/homebrew/etc/bash_completion.d/docker' ==> Unlinking Binary '/opt/homebrew/etc/bash_completion.d/docker-compose' ==> Unlinking Binary '/opt/homebrew/share/zsh/site-functions/_docker' ==> Unlinking Binary '/opt/homebrew/share/zsh/site-functions/_docker_compose' ==> Unlinking Binary '/opt/homebrew/share/fish/vendor_completions.d/docker.fish' ==> Unlinking Binary '/opt/homebrew/share/fish/vendor_completions.d/docker-compose.fish' ==> Unlinking Binary '/usr/local/bin/vpnkit' ==> Unlinking Binary '/usr/local/bin/com.docker.cli' ==> Purging files for version 4.21.1,114176 of Cask docker
これでアンインストールできたので、次のように問題なく再インストールできます。
$ brew install --cask docker ==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/c95d492d9b8e131326ecaa484f55c28203212715/Casks/docker.rb Already downloaded: /Users/ytooyama/Library/Caches/Homebrew/downloads/7fce9c177e1a13ed852b4c869f27367678acc021b3a60a97bee0c9b61e236478--docker.rb ==> Downloading https://desktop.docker.com/mac/main/arm64/114176/Docker.dmg Already downloaded: /Users/ytooyama/Library/Caches/Homebrew/downloads/747a0a15d6dae5c0345960a9466fede34dd11e37cce3e6ecee3b3f04c494fcb3--Docker.dmg ==> Installing Cask docker ==> Moving App 'Docker.app' to '/Applications/Docker.app' ==> Linking Binary 'docker' to '/usr/local/bin/docker' ==> Linking Binary 'docker-compose' to '/usr/local/bin/docker-compose' ==> Linking Binary 'docker-compose' to '/usr/local/bin/docker-compose-v1' ==> Linking Binary 'docker-credential-desktop' to '/usr/local/bin/docker-credential-desktop' ==> Linking Binary 'docker-credential-ecr-login' to '/usr/local/bin/docker-credential-ecr-login' ==> Linking Binary 'docker-credential-osxkeychain' to '/usr/local/bin/docker-credential-osxkeychain' ==> Linking Binary 'docker-index' to '/usr/local/bin/docker-index' ==> Linking Binary 'hub-tool' to '/usr/local/bin/hub-tool' ==> Linking Binary 'kubectl' to '/usr/local/bin/kubectl.docker' ==> Linking Binary 'docker.bash-completion' to '/opt/homebrew/etc/bash_completion.d/docker' ==> Linking Binary 'docker-compose.bash-completion' to '/opt/homebrew/etc/bash_completion.d/docker-compose' ==> Linking Binary 'docker.zsh-completion' to '/opt/homebrew/share/zsh/site-functions/_docker' ==> Linking Binary 'docker-compose.zsh-completion' to '/opt/homebrew/share/zsh/site-functions/_docker_compose' ==> Linking Binary 'docker.fish-completion' to '/opt/homebrew/share/fish/vendor_completions.d/docker.fish' ==> Linking Binary 'docker-compose.fish-completion' to '/opt/homebrew/share/fish/vendor_completions.d/docker-compose.fish' ==> Linking Binary 'com.docker.vpnkit' to '/usr/local/bin/vpnkit' ==> Linking Binary 'com.docker.cli' to '/usr/local/bin/com.docker.cli' 🍺 docker was successfully installed!
ちなみに--force
オプションをつけてコマンドを実行した場合、次のようなダイアログはいつものように現れますが...
Docker for macのアカウントのログイン情報などは削除されないようで、起動したら元の状態に戻っていました(右上の表示から、Dockerログイン済みであることがわかる)。
Docker Desktopが正常に起動できず、リセットボタンを押してもリセットできずにちょっと焦りましたが、なんとかなって良かったです。