1

As you know. kafka is depends on zookeeper. I want to config zk port for kafka.

zk

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}

resource "docker_image" "zookeeper" {
  name = "ubuntu/zookeeper:latest"
}

resource "docker_container" "zookeeper" {
  image = docker_image.zookeeper.name
  name  = "zookeeper_test"
  ports {
    internal = 2181
    external = 12181
  }
}

kafka

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}

resource "docker_image" "kafka" {
  name = "ubuntu/kafka:latest"
}

resource "docker_container" "kafka" {
  image = docker_image.kafka.name
  name  = "kafka_test"
// Maybe this field "command" to use, but it's not work.
  command = [
    "-e", "ZOOKEEPER_PORT=12181"
  ]
  ports {
    internal = 9092
    external = 19092
  }
}
Marko E
  • 13,362
  • 2
  • 19
  • 28
Jasper
  • 11
  • 1

1 Answers1

1

You should use env option. Additionally, in order to tell terraform that the Kafka container depends on the Zookeeper, you have to use implicit dependency to make sure one is created before the other:

resource "docker_container" "kafka" {
  image = docker_image.kafka.name
  name  = "kafka_test"
  env = [
    "ZOOKEEPER_PORT=${docker_container.zookeeper.ports[0].external}"
  ]
  ports {
    internal = 9092
    external = 19092
  }
}
theherk
  • 6,954
  • 3
  • 27
  • 52
Marko E
  • 13,362
  • 2
  • 19
  • 28