
Rancher Desktop で act を実行時の "Cannot connect to the Docker daemon" エラーの解決方法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Rancher Desktop で GitHub Actions のローカル実行ツール「act」を使用する際、Docker デーモンへの接続エラーが発生することがあります。本記事では、この問題の原因と 3 つの解決方法を解説します。
Error: Cannot connect to the Docker daemon at unix:///Users/[USER_NAME]/.docker/run/docker.sock. Is the docker daemon running?
対処と原因早見
原因
Rancher Desktop が使用する Docker ソケットのパスが、act が想定するソケットのパスと異なることが原因でした。
対処方法
| 方法 | 説明 | 難易度 | 
|---|---|---|
| 1. 環境変数の設定 | DOCKER_HOST環境変数を設定 | 簡単 | 
| 2. ソケットの指定 | act コマンドでソケットのパスを直接指定 | 簡単 | 
| 3. Rancher Desktop の設定変更 | 管理者権限で起動するよう設定変更 | 若干手間 | 
動作環境
| 項目 | バージョン/種類 | 
|---|---|
| macOS | 13.6 | 
| CPU | M1 Max | 
| Rancher Desktop | 1.15.0 | 
動作環境詳細
$ sw_vers
ProductName:		macOS
ProductVersion:		13.6
BuildVersion:		22G120
$ sysctl -n machdep.cpu.brand_string
Apple M1 Max
$ rdctl version
rdctl client version: 1.1.0, targeting server version: v1
問題の状況
Rancher Desktop を利用して act を実行すると、Docker デーモンへの接続エラーが発生しました。以下はactコマンド実行時の具体的なエラーメッセージです。
$ act --container-architecture linux/amd64
INFO[0000] Using docker host 'unix:///Users/ohmura.yasutaka/.docker/run/docker.sock', and daemon socket 'unix:///Users/ohmura.yasutaka/.docker/run/docker.sock'
[CI/test] 🚀  Start image=ghcr.io/catthehacker/ubuntu:act-latest
[CI/test]   🐳  docker pull image=ghcr.io/catthehacker/ubuntu:act-latest platform=linux/amd64 username= forcePull=true
Error: Cannot connect to the Docker daemon at unix:///Users/ohmura.yasutaka/.docker/run/docker.sock. Is the docker daemon running?
このエラーメッセージから、以下の点が問題として考えられます。
act が接続しようとしている Docker ソケットのパスは unix:///Users/ohmura.yasutaka/.docker/run/docker.sock です。しかし、このパスで Docker デーモンに接続できていません。
Rancher Desktop が起動しているにもかかわらず、Docker デーモンに接続できない原因として、ソケットのパスの不一致が考えられます。Rancher Desktop がデフォルトとは異なるパスで Docker ソケットを作成している可能性があります。
原因の調査
結論から述べると、act が想定する Docker ソケットのパスと、Rancher Desktop が実際に使用しているソケットのパスが異なっていました。
実際のソケットのパスの確認
docker context inspectコマンドで確認すると、実際のソケットのパスが以下のようになっています。
$ docker context inspect
[
    {
        "Name": "rancher-desktop",
        "Metadata": {
            "Description": "Rancher Desktop moby context"
        },
        "Endpoints": {
            "docker": {
                "Host": "unix:///Users/ohmura.yasutaka/.rd/docker.sock",
                "SkipTLSVerify": false
            }
        },
        "TLSMaterial": {},
        "Storage": {
            "MetadataPath": "/Users/ohmura.yasutaka/.docker/contexts/meta/b547d66a5de60e5f0843aba28283a8875c2ad72e99ba076060ef9ec7c09917c8",
            "TLSPath": "/Users/ohmura.yasutaka/.docker/contexts/tls/b547d66a5de60e5f0843aba28283a8875c2ad72e99ba076060ef9ec7c09917c8"
        }
    }
]
ソケットのパスが異なっていました。
| 項目 | ソケットのパス | 
|---|---|
| act 接続先のソケット | unix:///Users/ohmura.yasutaka/.docker/run/docker.sock | 
| 実際に使用しているソケット | unix:///Users/ohmura.yasutaka/.rd/docker.sock | 
対処方法
エラーを解決するには、以下の 3 つの方法があります。
1. 環境変数の設定
DOCKER_HOST環境変数を設定することで、act に正しいソケットのパスを指定します。
$ export DOCKER_HOST=unix:///Users/ohmura.yasutaka/.rd/docker.sock
$ act --container-architecture linux/amd64
- 利点: 設定が簡単
- 欠点: セッションごとに設定が必要
2. ソケットを直接指定
act コマンド実行時に--container-daemon-socketでソケットのパスを直接指定します。
$ act --container-daemon-socket unix:///Users/ohmura.yasutaka/.rd/docker.sock --container-architecture linux/amd64
- 利点: 設定が簡単
- 欠点: コマンド実行時に毎回指定が必要
3. Rancher Desktop の設定変更
Rancher Desktop がユーザ権限で動いていると/var/run/ではなくホームディレクトリ配下に UNIX ソケットが作られます。管理者権限で起動することで、/var/run/docker.sockにソケットが作成されるようになります。
詳細な手順と説明は以下のリンクを参照してください。
設定手順
Rancher Desktop を管理者権限で起動するように設定を変更します。
- Rancher Desktop の設定を開く
- 「Application」タブで「Administrative Access」にチェックを入れる

- 確認ダイアログでチェックを入れずに OK をクリック

- 端末を再起動
設定変更後、ソケットがunix:///var/run/docker.sockに変更されます。
$ docker context inspect
[
    {
        "Name": "default",
        "Metadata": {},
        "Endpoints": {
            "docker": {
                "Host": "unix:///var/run/docker.sock",
                "SkipTLSVerify": false
            }
        },
        "TLSMaterial": {},
        "Storage": {
            "MetadataPath": "\u003cIN MEMORY\u003e",
            "TLSPath": "\u003cIN MEMORY\u003e"
        }
    }
]
設定変更後、ソケットがunix:///var/run/docker.sockに変更され、act はデフォルト設定で動作するようになります。
$ act --container-architecture linux/amd64
- 利点: 恒久的な解決策
- 欠点: Rancher Desktop が管理者権限を使うことになる
まとめ
Rancher Desktop で act を使用する際の今回のエラーは、主に Docker ソケットのパスの違いによって引き起こされます。環境変数の設定、ソケットの直接指定、または Rancher Desktop の設定変更によって解決できます。
- 環境変数設定:簡単だがセッション毎に設定が必要
- ソケット直接指定:簡単だが都度指定が必要
- Rancher Desktop 設定変更:恒久的だがセキュリティ考慮が必要
状況に応じて最適な方法を選択してください。
おわりに
GitHub Actions のテストに act を利用してみようと思って軽い気持ちではじめました。ですが、Rancher Desktop の理解不足でハマったので書き残しました。
実行環境が Apple silicon だと、act コマンド実行の都度--container-architecture linux/amd64 の指定が手間なので~/.actrcに追記しておくと楽です。
--container-architecture linux/amd64












