🐡

Cannot connect to the Docker daemon at unix:///var/run/docker.sock

2023/06/04に公開

エラー発生箇所

エラー発生箇所は、下記の「Terraform の AWS の Tutorial」内です。
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli#quick-start-tutorial

terraform インストール後に、terraform を利用して、Docker Desktop 上に nginx のコンテナをデプロイするところでエラー発生した。

エラー内容

Tutorial の記載通り、下記のmain.tf ファイルを用意して、

main.tf
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "tutorial"

  ports {
    internal = 80
    external = 8000
  }
}

terraform applyコマンドを実行すると、Docker daemon へ接続不可(unix:///var/run/docker.sock が存在しない?)な旨のエラーが発生した。

<user>@<hostname> learn-terraform-docker-container % terraform apply
╷
│ Error: Error pinging Docker server: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
│
│   with provider["registry.terraform.io/kreuzwerker/docker"],
│   on main.tf line 10, in provider "docker":10: provider "docker" {}
│
╵

Docker Desktop は起動中だったが、ls -la /var/run/docker.sockを実行してみると、確かにdocker.sockファイルが存在しない様子。

エラー解決方法

まず、docker context ls コマンドを実行し、docker.sockファイルのパスを確認する。

<user>@<hostname> learn-terraform-docker-container % docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                              KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux *     moby                                                          unix:///Users/<user>/.docker/run/docker.sock

そして、判明したdocker.sockのパスをmain.tfファイルへ、明示的に設定追加する。
結果、エラー解消されました。

main.tf
〜省略〜

provider "docker" {
  # host = "unix:///var/run/docker.sock"
  host = "unix:///Users/<user>/.docker/run/docker.sock"

〜省略〜

Discussion