Rancher Desktop で act を実行時の "Cannot connect to the Docker daemon" エラーの解決方法

Rancher Desktop で act を実行時の "Cannot connect to the Docker daemon" エラーの解決方法

Clock Icon2024.08.19

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にソケットが作成されるようになります。

詳細な手順と説明は以下のリンクを参照してください。

https://dev.classmethod.jp/articles/aws-sam-cli-cannout-launch-on-rancher-desktop/

設定手順

Rancher Desktop を管理者権限で起動するように設定を変更します。

  1. Rancher Desktop の設定を開く
  2. 「Application」タブで「Administrative Access」にチェックを入れる

Rancher_Desktop_-_Preferences

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

Rancher_Desktop_と_新しいタブ

  1. 端末を再起動

設定変更後、ソケットが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 の設定変更によって解決できます。

  1. 環境変数設定:簡単だがセッション毎に設定が必要
  2. ソケット直接指定:簡単だが都度指定が必要
  3. Rancher Desktop 設定変更:恒久的だがセキュリティ考慮が必要

状況に応じて最適な方法を選択してください。

おわりに

GitHub Actions のテストに act を利用してみようと思って軽い気持ちではじめました。ですが、Rancher Desktop の理解不足でハマったので書き残しました。

実行環境が Apple silicon だと、act コマンド実行の都度--container-architecture linux/amd64 の指定が手間なので~/.actrcに追記しておくと楽です。

~/.actrc
--container-architecture linux/amd64

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.