くりにっき

フルスタックキュアエンジニアです

Macでsudo無しでdockerコマンドを使えなくなってハマった

tl;dr;

  • docker.sock のパスがおかしくなってた。

コンテキスト

Macを利用してるんですがいつの頃かsudo無しでdockerコマンドが使えなくなっていました。

$ docker run --rm -it ubuntu:focal
docker: Cannot connect to the Docker daemon at unix:///Users/sue445/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

sudoをつければdockerコマンドが使えるのでそこまで困らなかったのだけど、sudo無しでdockerを実行しないといけない案件が出てきてしまったので頑張って調査しました。

環境

  • M1 Mac (macOS 12.4)
  • Docker Desktopのdockerを使いたい

調査内容

M1 Macだとsudoつけないとdockerコマンドが叩けないんだけど、別で持ってるIntel Macだとsudo無しでdockerコマンドが使えたので差分を調べました。(macOSのバージョンはどっちも同じ)

dockerコマンドの実体

M1 Mac(sudoをつけないとdockerコマンドを叩けない環境)での実行結果

$ which docker
/opt/homebrew/bin/docker

$ ls -l /opt/homebrew/bin/docker
lrwxr-xr-x  1 sue445  admin  36  1 14 16:17 /opt/homebrew/bin/docker -> ../Cellar/docker/20.10.12/bin/docker

Intel Mac(sudoをつけなくてもdockerコマンドを叩ける環境)での実行結果

$ which docker
/usr/local/bin/docker

$ ls -l /usr/local/bin/docker
lrwxr-xr-x  1 root  admin  54  9  2  2021 /usr/local/bin/docker -> /Applications/Docker.app/Contents/Resources/bin/docker

Docker Desktopを入れてるのにhomebrewのdockerを参照していておかしくなってる???

下記コマンドでhomebrewで入れているDockerをアンインストールしたんだけど、それでもまだsudo無しでdockerコマンドが実行できない

$ brew uninstall docker

$ ls -l /usr/local/bin/docker
lrwxr-xr-x  1 root  wheel  54  9  2  2021 /usr/local/bin/docker -> /Applications/Docker.app/Contents/Resources/bin/docker

~/docker.sockのパーミッションを調べる

冒頭のエラーメッセージに

Cannot connect to the Docker daemon at unix:///Users/sue445/docker.sock

があったのでパーミッションがどうなってるか調べた

M1 Macでの結果(sudoをつけないとdockerコマンドを叩けない環境)

$ ls -l ~/docker.sock
srw-------  1 sue445  staff  0  1 14 17:09 /Users/sue445/docker.sock

Intel Macでの結果(sudoをつけなくてもdockerコマンドを叩ける環境)

$ ls -l ~/docker.sock
ls: /Users/sue445/docker.sock: No such file or directory

マジ!?

けどこの設定を見る感じDocker Desktopは ~/.docker/run/docker.sock の方の設定を使ってそうなんだよなあ

$ cat ~/.docker/contexts/meta/fe9c6bd7a66301f49ca9b6a70b217107cd1284598bfc254700c989b916da791e/meta.json
{"Name":"desktop-linux","Metadata":{},"Endpoints":{"docker":{"Host":"unix:///Users/sue445/.docker/run/docker.sock","SkipTLSVerify":false}}}

$ ls -l /Users/sue445/.docker/run/docker.sock
srwxr-xr-x  1 sue445  staff  0  6 14 15:36 /Users/sue445/.docker/run/docker.sock

/Users/sue445/docker.sock の設定がどこにあるか見つからなかったので試しにシンボリックリンクを貼ってみた

ln -s ~/.docker/run/docker.sock ~/docker.sock

再実行

$ docker run --rm -it ubuntu:focal
Unable to find image 'ubuntu:focal' locally
focal: Pulling from library/ubuntu
11e23ac719b3: Pull complete
Digest: sha256:fd92c36d3cb9b1d027c4d2a72c6bf0125da82425fc2ca37c414d4f010180dc19
Status: Downloaded newer image for ubuntu:focal
root@f1188ddf7c6e:/#

キタ━━━━(゚∀゚)━━━━!!

おかしくなってた原因と思われるもの

一時期Limaの検証を行っていてその時にhomebrewでdockerを入れた記憶があるので、それが原因かもしれないです。(全然自信ない)