如何解决Terraform:Docker 提供程序忽略图像摘要的更新
我尝试通过 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
的摘要不同。
看似简单的配置,我还是无法配置。
解决方法
当摘要发生变化时,我似乎误解了提取图像的目的。摘要校验和仅用于指示有更新版本的图像,仅此而已。 Terraform 不会更新任何东西(它只能将较新的版本下载到本地注册表),因为镜像的版本没有改变,只有 Docker 注册表中的摘要。 换句话说,如果你想用更新版本的镜像更新你的服务,你必须更新镜像的版本,而不仅仅是更新现有的版本,因为摘要会被发现,但服务不会被更新.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。