0

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、すべてが機能しますが、実行中のコンテナーが強制的に置き換えられます。

4

2 に答える 2

1

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

于 2020-11-04T09:28:41.437 に答える