とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

HomebrewでDocker Desktopを再インストールするときに注意すること

他の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を見つけました。

github.com

要約すると、--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が正常に起動できず、リセットボタンを押してもリセットできずにちょっと焦りましたが、なんとかなって良かったです。