Terraform docker无法通过远程主机的容器注册表进行身份验证



我在一台使用Terraform 0.13.4的Windows机器上,试图使用Terraform和Docker提供程序在远程主机上启动一些容器:

provider "docker" {
host = "tcp://myvm:2376/"
registry_auth {
address = "myregistry:443"
username = "myusername"
password = "mypassword"
}
ca_material = file(pathexpand(".docker/ca.pem"))
cert_material = file(pathexpand(".docker/cert.pem"))
key_material = file(pathexpand(".docker/key.pem"))
}
data "docker_registry_image" "mycontainer" {
name = "myregistry:443/lvl1/lvl2/myimage:latest"
}

我很难处理这个问题,因为它无法通过我的私人注册表进行身份验证。总是得到401 Unauthorized

如果我这样做不是为了获取sha256_digest,而只是使用docker_container资源,那么一切都可以,但它会强制替换正在运行的容器。

Hello Angelos如果你不想强制更换正在运行的容器,你应该试试这个:

provider "docker" {
host = "tcp://myvm:2376/"
registry_auth {
address = "myregistry:443"
username = "myusername"
password = "mypassword"
}
ca_material = file(pathexpand(".docker/ca.pem"))
cert_material = file(pathexpand(".docker/cert.pem"))
key_material = file(pathexpand(".docker/key.pem"))
}
data "docker_registry_image" "mycontainer" {
name = "myregistry:443/lvl1/lvl2/myimage:latest"
}
resource "docker_image" "example" {
name = data.docker_registry_image.mycontainer.name
pull_triggers = [data.docker_registry_image.mycontainer.sha256_digest]
keep_locally = true
}

然后在容器中使用:

resource "docker_container" "example" {
image = docker_image.example.latest
name = "container_name"

}

你应该使用

docker_image.example.latest

使用资源docker_image本身(如果它已经存在(,他不会提取映像,也不会重新启动容器,但如果您将名称作为字符串传递,他每次都会替换容器。

https://www.terraform.io/docs/providers/docker/r/container.html

发现代码是正确的,并且我正在使用的容器服务(旧版本的ProGet(没有正确回复auth调用。我使用另一个注册表测试了代码,一切都如预期的那样工作。

最新更新