はじめに
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