Rancher Desktop で act を実行時の "Cannot connect to the Docker daemon" エラーの解決方法
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