AWS SAM CLIで「Docker is unreachable. Docker needs to be running to build inside a container.」のエラーが発生したので対処した

コマンド実行がいきなり失敗するようになって困ったことはありませんか? 私はあります。
2023.03.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ある日突然、AWS SAM CLIのbuildコマンドを実行すると、失敗するようになりました。

$ sam build --use-container

...(省略)...

Build Failed
Error: Docker is unreachable. Docker needs to be running to build inside a container.

心当たりといえば、macOSをVenturaにアップグレードしたぐらいです。 焦りながら慌てて対処したので、簡単ですがご紹介します。

おすすめの方

  • 冒頭のエラーメッセージに遭遇した方

環境

Docker Desktopは利用していません。

項目 バージョン
Mac M1 Mac
macOS 13.2.1
SAM CLI version 1.76.0
docker 20.10.21-rd, build ac29474
Rancher Desktop 1.7.0

まずは、現状の失敗内容をあらためて把握する

sam init

sam init \
    --runtime python3.9 \
    --name sam-build-test \
    --app-template hello-world \
    --no-tracing \
    --no-application-insights \
    --package-type Zip

sam buildで--use-containerオプションをつけると失敗する

sam buildコマンドは成功しますが、--use-containerオプションをつけると失敗します。

$ sam build --use-container

...(省略)...

Build Failed
Error: Docker is unreachable. Docker needs to be running to build inside a container.

対処して成功させる(2案)

2つの対処方法があります。

案1: コマンド実行時にDOCKER_HOSTを指定する

次のIssuesを参考にします。

docker infoコマンドを実行し、現在のContextを把握します。

$ docker info
Client:
 Context:    rancher-desktop

次に、docker context lsコマンドを実行し、dockerが利用しているcontextの「DOCKER ENDPOINT」を把握します。

$ docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT                                     KUBERNETES ENDPOINT   ORCHESTRATOR
default             Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                               swarm
desktop-linux                                                 unix:///Users/userName/.docker/run/docker.sock                         
rancher-desktop *   Rancher Desktop moby context              unix:///Users/userName/.rd/docker.sock

このDOCKER ENDPOINTを環境変数に設定し、sam buildコマンドを実行します。

$ DOCKER_HOST=unix:///Users/userName/.rd/docker.sock sam build --use-container

...(省略)...

Build Succeeded

案2: シンボリックリンクを利用する

次のコメントのように、シンボリックリンクを利用します。

実際のコマンドは下記です。

sudo ln -s "$HOME/.docker/run/docker.sock" /var/run/docker.sock
$ sam build --use-container

...(省略)...

Build Succeeded

さいごに

同様の現象に遭遇した方の参考になれば幸いです。

参考