はじめに
Docker Desktop for Macで /var/run/docker.sock に繋がらないエラーになり、それを解決したのでログとして残しておきます。
前提として、自分の環境では1つのMacの中にアカウントを2つ作り、その両方のアカウントそれぞれでDocker Desktopを使っていました。
環境情報
Docker Desktop for Macのバージョンは以下です。
Version
4.20.0 (109717)
Engine: 24.0.2
Compose: v2.18.1
Credential Helper: v0.7.0
Kubernetes: v1.25.9
エラー発生
ある日、いつもの様にMacを立ち上げ、Docker Desktop for Macを起動し、 docker-compose up -d を使うと /var/run/docker.sock に繋がらない旨のエラーが出ました。
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dproject_name%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
試行錯誤
permission deniedと言われているので、/var/run/docker.sock のパーミッションを調べてみます。
ls -l /var/run/docker.sock
lrwxr-xr-x 37 root daemon 2023-06-02 14:00 /var/run/docker.sock -> /Users/user_2/.docker/run/docker.sock
自分はMacに2つのアカウントがあり(ここでは2つのアカウント名をそれぞれ user_1, user_2 とします)、 user_1 でログインしているのに、 user_2 のdocker.sockが参照されているのでこれが怪しそうです。
ググってみると、sudoしてみるといいとあったのでしてみましたが、うまくいきません。
Cannot connect to the Docker daemon at unix:///Users/user_2/.docker/run/docker.sock. Is the docker daemon running?
シンボリックリンク先が user_2 のものになってるのがおかしそうなので、 user_1 のものにすればいいのでは?と思いやってみました。
sudo ln -si "$HOME/.docker/run/docker.sock" /var/run/docker.sock
予想通り、うまくいきました。
しかし、シンボリックリンクがどのタイミングで変わるかはわかりませんが、これ別アカウントにログインするたびに切り替えるのはしんどいよなあと思い解決策をググってみると、Docker Desktop for Macのgithubのissueに興味深い記述が。
Docker Desktop for Mac removed /var/run/docker.sock per 4.13.0 Release Notes: docs.docker.com/desktop/release-notes/#docker-desktop-4130 "By default Docker will not create the /var/run/docker.sock symlink on the host and use the docker-desktop CLI context instead."
バージョン4.13.0から /var/run/docker.sock のシンボリックリンクは作らなくなったそうです。
え、ということはもしかして、このsockファイルはいらない...??
sudo rm /var/run/docker.sock
user_1 のアカウントでDocker Desktopを起動したまま user_2 で問題なくDocker Desktopを起動し、 docker 関連のコマンドが問題なく動きました。
結論
バージョン4.13.0から /var/run/docker.sock のシンボリックリンクは作らなくなったので、消してしまいましょう。
sudo rm /var/run/docker.sock