使用terraform注册表中的docker图像

使用terraform注册表中的docker图像,docker,terraform,Docker,Terraform,我正在尝试使用一个docker映像,该映像托管在terraform的docker hub注册表中。当我运行terraform apply时,会说它不存在或者需要docker登录。然后它失败,请求的对资源的访问被拒绝。我做错了什么 main.tf: provider "docker" { host = "npipe:////.//pipe//docker_engine" registry_auth { address = &

我正在尝试使用一个docker映像,该映像托管在terraform的docker hub注册表中。当我运行
terraform apply
时,会说它不存在或者需要docker登录。然后它失败,请求的对资源的访问被拒绝。我做错了什么

main.tf:

provider "docker" {
    host = "npipe:////.//pipe//docker_engine"

    registry_auth {
        address = "registry.hub.docker.com"
        username = "username"
        password = "passwword"
    }
}

resource "docker_image" "ubuntu" {
  name          = "data.docker_registry_image.ubuntu.name"
  pull_triggers = ["data.docker_registry_image.ubuntu.sha256_digest"]
}

data "docker_registry_image" "ubuntu" {
  name = "ubuntu:latest"
}

versions.tf:

terraform {
  required_providers {
    docker = {
      source = "terraform-providers/docker"
    }
  }
  required_version = ">= 0.13"
}

错误输出:

Error: Unable to read Docker image into resource: Unable to pull image data.docker_registry_image.ubuntu.name: error pulling image data.docker_registry_image.ubuntu.name: Error response from daemon: pull access denied for data.docker_registry_image.ubuntu.name, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

  on main.tf line 11, in resource "docker_image" "ubuntu":
  11: resource "docker_image" "ubuntu" {

您需要从
资源“docker\u image”“ubuntu”
块中删除四个引号。

您需要从
资源“docker\u image”“ubuntu”块中删除四个引号
block.

当您运行
terraform apply
时,是否可以编辑您的问题以包含完整的错误输出?是的,当然,我添加了错误输出,正如下面的答案所示;您需要删除引号。这使得文档中使用的语法已经过时,仍然需要引用。我正在运行terraform v0.13.3,它不再需要引用和错误。不确定从哪个版本会发生此错误,但至少从v0.13.3开始。您从未想要这样的引用。您可能希望在Terraform 0.11及以下版本中使用插值语法,即“${data.docker\u registry\u image.ubuntu.name}”。这在Terraform 0.12及更高版本中仍然有效,但它会警告您,您应该只使用
数据.docker\u registry\u image.ubuntu.name
。请您在运行
Terraform apply
时编辑您的问题以包含完整的错误输出?是的,当然,我添加了错误输出,正如下面的答案所示;您需要删除引号。这使得文档中使用的语法已经过时,仍然需要引用。我正在运行terraform v0.13.3,它不再需要引用和错误。不确定从哪个版本会发生此错误,但至少从v0.13.3开始。您从未想要这样的引用。您可能希望在Terraform 0.11及以下版本中使用插值语法,即“${data.docker\u registry\u image.ubuntu.name}”。这在Terraform 0.12及以上版本中仍然是有效的语法,但它会警告您,您应该只使用
data.docker\u registry\u image.ubuntu.name
。这看起来是正确的答案,但通常对于回答的小问题/键入错误的问题,我们会对问题进行评论,指出问题,然后按原样投票结束不太可能对未来的人有帮助。这看起来是正确的答案,但通常对于回答的小问题/拼写错误,我们会对问题进行评论,指出问题所在,然后投票以拼写错误结束,因为这不太可能对未来的人有帮助。