Open2
MacのDocker DesktopでVSCodeのRemote Containerに接続できなくなった場合の対処法メモ

現象
いつも通り docker compose up
でコンテナを起動したあと、VSCodeのRemote Containerで接続しようとしたら、
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
というエラーで接続できなかった。
原因
it's because Docker got rid of the /var/run/docker.sock symlink in default behavior
とのこと。
対応策
下のコマンドを実行。
sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.raw.sock /var/run/docker.sock
参照元は下のページの「Permanent Solution: Manually Symlink」の箇所。

どうもMacを再起動するたびに上のln -sコマンドを実行しないとダメみたいなので、.zshrcに追記しておいた。
if [ ! -S /var/run/docker.sock ]; then
sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.raw.sock /var/run/docker.sock
fi
メモ: -e と -S の違い
if [ ! -e ... ] と if [ ! -S ... ] は、どちらもBashスクリプトでファイルやディレクトリの存在を確認するための条件式ですが、チェックする内容が異なります。
if [ ! -e ... ]: この条件式は、指定したファイルやディレクトリが存在しない場合に真となります。-e は「存在するかどうか」を確認するためのオプションです。
if [ ! -S ... ]: この条件式は、指定したファイルが存在しないか、またはソケットファイルでない場合に真となります。-S は「ソケットファイルであるかどうか」を確認するためのオプションです。つまり、-e は一般的な存在確認に使われ、-S は特にソケットファイルであるかどうかを確認するために使われます。