terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "3.0.1"
}
}
}
provider "docker" {
host = "unix:///var/run/docker.sock"
host = "**npipe:////./pipe/docker_engine"**
}
# Pulls the image
resource "docker_image" "ubuntu" {
name = "ubuntu:latest"
}
# Create a container
resource "docker_container" "foo" {
image = docker_image.ubuntu.image_id
name = "foo"
}
D:\\workspace\\test_terraform>terraform plan
╷
│ **Error: Error initializing Docker client: protocol not available**
│
│ with provider["registry.terraform.io/kreuzwerker/docker"],
│ on main.tf line 10, in provider "docker":
│ 10: provider "docker" {
│
terraform 코드로 docker 컨테이너를 생성하는 코드를 작성하여 terraform plan 명령 시
Error: Error initializing Docker client: protocol not available
에러가 발생했습니다. 이는 Terraform이 Docker API 에 연결하지 못하는 경우 발생합니다.
‘provider “docker”’ 블록에서 ‘host’ 매개 변수를 사용하여 Docker API에 대한 호스트 주소를 설정할 수 있습니다.
윈도우에서는 Docker Desktop이 로컬 Docker API를 제공합니다. 기본적으로, ‘host’ 값은 "npipe:////./pipe/docker_engine" 으로 설정되며, 이는 Docker Desktop API를 가리킵니다.
기존의 빨간색 영역의 host 설정은 하늘색 영역인 host 설정으로 변경 후 terraform plan 하니
D:\\workspace\\test_terraform>terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
+ create
Terraform will perform the following actions:
# docker_container.foo will be created
+ resource "docker_container" "foo" {
+ attach = false
+ bridge = (known after apply)
+ command = (known after apply)
+ container_logs = (known after apply)
+ container_read_refresh_timeout_milliseconds = 15000
+ entrypoint = (known after apply)
+ env = (known after apply)
+ exit_code = (known after apply)
+ hostname = (known after apply)
+ id = (known after apply)
+ image = (known after apply)
+ init = (known after apply)
+ ipc_mode = (known after apply)
+ log_driver = (known after apply)
+ logs = false
+ must_run = true
+ name = "foo"
+ network_data = (known after apply)
+ read_only = false
+ remove_volumes = true
+ restart = "no"
+ rm = false
+ runtime = (known after apply)
+ security_opts = (known after apply)
+ shm_size = (known after apply)
+ start = true
+ stdin_open = false
+ stop_signal = (known after apply)
+ stop_timeout = (known after apply)
+ tty = false
+ wait = false
+ wait_timeout = 60
+ healthcheck {
+ interval = (known after apply)
+ retries = (known after apply)
+ start_period = (known after apply)
+ test = (known after apply)
+ timeout = (known after apply)
}
+ labels {
+ label = (known after apply)
+ value = (known after apply)
}
}
# docker_image.ubuntu will be created
+ resource "docker_image" "ubuntu" {
+ id = (known after apply)
+ image_id = (known after apply)
+ name = "ubuntu:latest"
+ repo_digest = (known after apply)
}
Plan: 2 to add, 0 to change, 0 to destroy.
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if
you run "terraform apply" now.
plan 명령어를 정상 수행한 후 추가할 작업이 없으면 apply 명령어를 실행하라고 뜨네요.