Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

Docker for Mac がアップデート後に起動しなくなった件

Docker for Mac がアップデート後に起動しなくなったのよ

以前にも同様のことがあった気がするが、また遭遇。せっかく週末にやる気を出そうとしている中で、こういうハマりをするのはお控えいただきたいところ。

エラーの内容はこんな内容で、単純に restart しても状況は変わらず(再度同じエラーになって docker は起動しないまま)

2021-09-04T01:15:49Z dockerd time="2021-09-04T01:15:49.913926085Z" level=debug msg="Calling GET /images/sha256:33173ccd286743e6b1c1b663a354562737b2980d2bbb6d7b493edbea8926ef4e/json"

macでdocker desktopが起動しないときのシンプルな対処方法 | DevelopersIO

ここらへんを見て、まぁ、そうか、そんなところか。と Reset to factory defaults を選択して再起動させる。

この日は試行錯誤の結果、上記のResetしても、アンインストール→インストールし直しても、動作してくれなかった。

対応に疲れたのもあり、当時は Docker Desktop が 4.0.0 になったばかりだったので、メジャーバージョンアップ起因の問題と勝手に決めつけて、次のパッチバージョンが出るのを待った。(つまり、一旦諦めて放置)

(後述する)解決編の要点

  • 原因は、mackup の Dropbox バックアップ(シンボリックリンク化)と、Dropboxの同期不調の合わせ技と思われる
  • 直接の起動失敗理由は、 docker-cli-api.sock にDockerがアクセスできなかったこと
  • mackup のバックアップ対象からDockerを外し、Dropboxフォルダへのシンボリックリンクを削除したら解決

解決編

新バージョンでもエラー再び

Docker Desktop が 4.0.1 が出たので、もう一度インストールからリトライしてみるも、まだ別の内容でエラーが出る。

解消する前にエラーのキャプチャを撮っておけば良かった、当時出ていたエラーメッセージはこんな内容。(以降、 username 部分はMacのユーザ名が入ります)

monitoring tasks: one of the sub-processes failed unexpectedly: docker serve --address unix:///Users/username/.docker/run/docker-cli-api.sock (pid: 64654)

ここから再度Reset Default ...をやっても、アンインストール→インストールしても、事象は解消せず。

エラーメッセージを冷静に見て状況確認

エラーメッセージをコピーしてググったりはしていたものの、それ自体をよく見て状況確認することが抜けていた。(恥ずかしながら) /Users/username/.docker/run/docker-cli-api.sock のファイルは今どういう状況なのか?を確認しに行くと、そもそも /Users/username/.docker 配下に /run ディレクトリが無かった。。

その代わりに、 /Users/username/.docker 配下には、run (選択型同期の競合) という名称+連番のフォルダが無数にできていた。

run (選択型同期の競合)
run (選択型同期の競合 1)
run (選択型同期の競合 2)
:

各フォルダの配下には、事象に関連する2ファイルが確かに存在している

  • docker-cli-api.sock
  • docker.sock

選択型同期の競合 とは?

ところで「(選択型同期の競合)」って、なんやねん?ということでググってみる

なるほど、Dropboxに関連する事象か。

ん?この .docker フォルダってDropboxと何か関係しているんだっけ?

事象とバックアップ機能との関連に気づく

/Users/username/.docker の状況を確認すべく、 ls -la で確認してみると

~/.docker -> /Users/username/Dropbox/Mackup/.docker

というシンボリックリンクになっている。なるほど。そうか、バックアップアプリの mackup.docker ディレクトリをDropbox フォルダ下にシンボリックリンク化させてたのか。

具体的に解決

mackup のバックアップ自体は重宝していたが、Dockerに関する設定やデータちゃんとバックアップしたい、という強い思いもなかったので、ここは単純にmackup のバックアップ対象から外して元の状態を復旧することにした。

  • % unlink .docker
  • % vi ~/.mackup.cfg で以下の内容を記入
[applications_to_ignore]
docker

これにて、Dockerが無事に起動するようになりました☆めでたしめでたし