【问题标题】:Terraform: Docker provider ignores update of image digestTerraform:Docker 提供者忽略了图像摘要的更新
【发布时间】:2021-03-09 17:49:06
【问题描述】:

我尝试通过 Terraform 配置我的 Docker 服务,当更新 Docker 映像并且远程注册表中提供新的映像摘要时,terraform apply 我希望 Terraform 能够检测到摘要更新并更新正在运行的服务。

我应用了来自 https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs/resources/registry_image 的配置,因此我的 Terraform 脚本如下所示:

(...)
data "docker_registry_image" "my-docker-image" {
  name = "my-registry/docker/my-image:2.263.3"
}

resource "docker_image" "docker-image" {
  name = data.docker_registry_image.my-docker-image.name
  pull_triggers = [data.docker_registry_image.my-docker-image.sha256_digest]
  keep_locally = true
}  
(...)

resource "docker_service" "my-service" {
  name = "my-service"

  task_spec {
    container_spec {
      image = data.docker_registry_image.my-docker-image.name
(...)

然后我执行 Terraform,可以清楚地看到来自远程注册表的摘要与运行容器中使用的摘要不同:

data.docker_registry_image.my-docker-image: Refreshing state... [id=sha256:d7aa8259d1503b970b14c66a06d144200d8f14a6c7f17d62cbfdad815309c9fb]

docker_image.my-docker-image: Refreshing state... [id=sha256:710bf0daf1b66543943dc086cfb3041000bb219aaf00ec75a8c18c770f4cb776my-registry/docker/my-image:2.263.3]

您可以看到两个摘要不同,但 Terraform 声称:

No changes. Infrastructure is up-to-date.

This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.

这不是真的,因为来自docker_registry_image 的摘要与docker_image 不同。

配置看起来很简单,但我还是无法配置。

【问题讨论】:

    标签: docker terraform docker-swarm


    【解决方案1】:

    看起来我误解了摘要更改时提取图像的目的。摘要校验和仅表明存在更新版本的图像,仅此而已。 Terraform 不会更新任何东西(它只能将较新的版本下载到本地注册表),因为镜像的版本没有改变,只有 Docker 注册表中的摘要。 换句话说,如果你想用更新版本的镜像更新你的服务,你必须更新镜像的版本,而不仅仅是更新现有的版本,因为摘要会被发现,但服务不会更新.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      相关资源
      最近更新 更多