泊坞窗容器-缺少属性

时间:2019-02-22 01:33:22

标签: docker terraform

我需要安装了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存储库才能使它正常工作,但是我不确定吗?

1 个答案:

答案 0 :(得分:0)

您只能使用${docker_image.centos...}插值的the docker_image resource documentation中列出的特定字段。特别是,即使您不使用标签:latest,也需要使用.latest属性引用:

image = "${docker_image.centos.latest}"

(如果该图像实际上是您在本地构建的,则可能还需要在docker_image资源上指定keep_locally选项,以使terraform destroy不会将其删除。 )