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だと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を入れた記憶があるので、それが原因かもしれないです。(全然自信ない)