Terraform 不在工作节点上创建 docker 服务
Terraform does not create docker service on worker node
我们需要在有限数量的主机上设置多个 jenkins 实例。
为此,我在两台服务器上设置了 Docker Swarm。
在 "master" 节点上,我使用 terraform 创建和管理 docker 服务。
当我手动创建服务时,容器会自动生成在工作节点上。当我创建一个有 2 个副本的服务时,容器会按应有的方式在两个节点上创建。
但是,当我使用 Terraform 代码创建和管理服务时,从未在工作节点上创建容器。即使我设置了 2 个副本,它们都是在主节点上创建的。
此处提供了用于创建服务的 main.tf 文件。
resource "docker_service" "jenkins_service" {
name = var.project_name
task_spec {
container_spec {
image = docker_image.jenkins_image.name
mounts {
target = "/var/jenkins_name"
source = docker_volume.jenkins_volume.name
type = "volume"
}
mounts {
source = "/var/run/docker.sock"
target = "/var/run/docker.sock"
type = "bind"
}
}
networks = ["${docker_network.jenkins_network.name}"]
}
endpoint_spec {
ports {
target_port = "8080"
published_port = var.web_interface_port
publish_mode = "ingress"
name = "WEB_INTERFACE"
}
ports {
target_port = "50000"
published_port = var.api_interface_port
publish_mode = "ingress"
name = "API_INTERFACE"
}
}
}
我不知道我做错了什么。任何帮助将不胜感激
此致。
为了他人的利益:
我使用的是自定义 docker 图像,terraform 代码本质上是使用以下格式调用这些图像:从而强制 swarm 仅在实际拥有图像的主节点上启动容器。
我发现 this 非常好 post 指出了确切的问题。我的设置缺少 docker 注册表。我按照 link 中的步骤解决了问题。
谢谢,"fernandezcuesta" 花时间回复我的查询。
问候
森蒂尔·内森 M
我们需要在有限数量的主机上设置多个 jenkins 实例。
为此,我在两台服务器上设置了 Docker Swarm。
在 "master" 节点上,我使用 terraform 创建和管理 docker 服务。
当我手动创建服务时,容器会自动生成在工作节点上。当我创建一个有 2 个副本的服务时,容器会按应有的方式在两个节点上创建。
但是,当我使用 Terraform 代码创建和管理服务时,从未在工作节点上创建容器。即使我设置了 2 个副本,它们都是在主节点上创建的。
此处提供了用于创建服务的 main.tf 文件。
resource "docker_service" "jenkins_service" {
name = var.project_name
task_spec {
container_spec {
image = docker_image.jenkins_image.name
mounts {
target = "/var/jenkins_name"
source = docker_volume.jenkins_volume.name
type = "volume"
}
mounts {
source = "/var/run/docker.sock"
target = "/var/run/docker.sock"
type = "bind"
}
}
networks = ["${docker_network.jenkins_network.name}"]
}
endpoint_spec {
ports {
target_port = "8080"
published_port = var.web_interface_port
publish_mode = "ingress"
name = "WEB_INTERFACE"
}
ports {
target_port = "50000"
published_port = var.api_interface_port
publish_mode = "ingress"
name = "API_INTERFACE"
}
}
}
我不知道我做错了什么。任何帮助将不胜感激
此致。
为了他人的利益: 我使用的是自定义 docker 图像,terraform 代码本质上是使用以下格式调用这些图像:从而强制 swarm 仅在实际拥有图像的主节点上启动容器。
我发现 this 非常好 post 指出了确切的问题。我的设置缺少 docker 注册表。我按照 link 中的步骤解决了问题。
谢谢,"fernandezcuesta" 花时间回复我的查询。
问候 森蒂尔·内森 M