Докер Terraform не может аутентифицироваться в реестре контейнеров для удаленного хоста

Я нахожусь на машине с Windows, использую Terraform 0.13.4 и пытаюсь развернуть некоторые контейнеры на удаленном хосте с помощью 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 ресурс, все работает, но требует замены работающих контейнеров.

2 ответа

Оказывается, код правильный, и служба контейнера, которую я использую (более старая версия ProGet), не отвечает правильно на вызовы аутентификации. Я протестировал код, используя другой реестр, и все работает как положено.

Привет, Анджелос, если вы не хотите принудительно заменять работающий контейнер, попробуйте следующее:

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

Другие вопросы по тегам