#terraform #docker-network
#terraform #docker-сеть
Вопрос:
Первый запуск Terraform Apply выдает «Ошибка: невозможно запустить контейнер: ответ об ошибке от демона: сетевая вакцина-сеть не найдена»
Второй запуск: все работает нормально.
Я думал, что Terraform сама управляет зависимостями — очевидно, здесь это не удается. У меня ошибка в моем файле? Или я могу сам создавать зависимости?
Файл .tf:
# Setting up docker network
resource "docker_network" "private_network" {
name = "vaccine-net"
attachable = true
ipam_config {
subnet = "10.0.1.0/24"
gateway = "10.0.1.254"
}
}
# create db container
resource "docker_container" "bootstrapper" {
name = "bootstrapper"
image = "vaccine/bootstrapper"
networks_advanced {
name = "vaccine-net"
ipv4_address ="10.0.1.1"
}
}
Ответ №1:
Вы уверены, что ваша сеть создана до создания контейнера? Я не вижу связи между вашей сетью и контейнером. Попробуйте со ссылкой на docker network (предпочтительно):
# Setting up docker network
resource "docker_network" "private_network" {
name = "vaccine-net"
attachable = true
ipam_config {
subnet = "10.0.1.0/24"
gateway = "10.0.1.254"
}
}
# create db container
resource "docker_container" "bootstrapper" {
name = "bootstrapper"
image = "vaccine/bootstrapper"
networks_advanced {
name = "${docker_network.private_network.name}"
ipv4_address ="10.0.1.1"
}
}
Или явно с помощью depends_on
:
# Setting up docker network
resource "docker_network" "private_network" {
name = "vaccine-net"
attachable = true
ipam_config {
subnet = "10.0.1.0/24"
gateway = "10.0.1.254"
}
}
# create db container
resource "docker_container" "bootstrapper" {
name = "bootstrapper"
image = "vaccine/bootstrapper"
networks_advanced {
name = "vaccine-net"
ipv4_address ="10.0.1.1"
}
depends_on = [docker_network.private_network]
}
Комментарии:
1. Я бы предпочел первый вариант! Поскольку это меньше строк кода, а terraform предоставляет такой хороший способ неявно создаваемых зависимостей.