我需要安装了docker的自定义centos映像。因此,我使用centos图像构建了它,并对其进行了自定义标记(如下所示)。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos custom 84766562f881 4 hours ago 664MB
centos/systemd latest 05d3c1e2d0c1 7 weeks ago 202MB
我试图在本地计算机上使用Terraform部署几个容器,每个容器都有一个来自另一个文件的唯一名称。泊坞窗映像在本地计算机上。这是TF代码。
$ cat main.tf
provider "docker" {
}
resource "docker_image" "centos" {
name = "centos:custom"
}
resource "docker_container" "app_swarm" {
image = "${docker_image.centos.custom}"
count = "${length(var.docker_cont)}"
name = "${element(var.docker_cont, count.index)}"
}
当我运行Terraform Apply时,出现此错误,我不确定该如何解决。有人可以指出我正确的方向吗?
Error: Error running plan: 1 error(s) occurred:
* docker_container.app_swarm: 3 error(s) occurred:
* docker_container.app_swarm[0]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'
* docker_container.app_swarm[1]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'
* docker_container.app_swarm[2]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'
是的,另一个文件带有名称,它是一个简单列表。
编辑:
谢谢大卫,尝试了您的建议并修改了代码,使其看起来像-
provider "docker" {
}
resource "docker_image" "centos" {
name = "centos:custom"
}
resource "docker_container" "app_swarm" {
image = "${docker_image.centos.latest}"
count = "${length(var.docker_cont)}"
name = "${element(var.docker_cont, count.index)}"
}
但是现在我得到了这个错误。
Error: Error applying plan:
1 error(s) occurred:
* docker_image.centos: 1 error(s) occurred:
* docker_image.centos: Unable to read Docker image into resource: Unable to pull image centos:custom: error pulling image centos:custom: Error response from daemon: manifest for centos:custom not found
我想我必须设置一个本地Docker存储库才能使它正常工作,但是我不确定吗?
答案 0 :(得分:0)
您只能使用${docker_image.centos...}
插值的the docker_image
resource documentation中列出的特定字段。特别是,即使您不使用标签:latest
,也需要使用.latest
属性引用:
image = "${docker_image.centos.latest}"
(如果该图像实际上是您在本地构建的,则可能还需要在docker_image
资源上指定keep_locally
选项,以使terraform destroy
不会将其删除。 )