如何使用terraform destroy强制删除Docker镜像

3
我正在跟随{{link1:terraform.io上的一个教程}},该教程让我使用terraform进行docker镜像和容器的配置,然后销毁terraform堆栈。但是,我遇到了以下错误:
Error: Unable to remove Docker image: 
Error response from daemon: conflict: unable to delete 540a289bab6c (must be forced) - 
image is being used by stopped container ae12197d265d

我知道原生的Docker解决方案只需要运行 docker rmi -f 540a289bab6c。但是,我想知道是否有一种基于terraform的方法来解决这个问题?
terraform资源 docker_image 的文档显示了在 terraform destroy 上尝试销毁镜像的原因:模板 main.tfkeep-locally 设置为 true。但它没有说明如何强制销毁。
教程中的 main.tf 如下:
terraform {
  required_providers {
    docker = {
      source = "terraform-providers/docker"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

那么,如何在不使用 Docker 原生工具手动干预的情况下,强制运行terraform destroy以在此模板上工作呢?
1个回答

3
错误信息表明存在另一个依赖于相同镜像的容器。可能是在terraform之外单独配置的docker容器,使用了教程中相同的nginx docker镜像。请检查docker ps -a以查看是否存在这样的容器,如果有,请运行docker rm -f <container_name>将其移除,然后您的terraform destroy应该可以正常工作。

1
是的!我已经停止了10个月前依赖于ngnix镜像的容器。在移除这些容器之后,terraform destroy命令成功执行了。 - Yann Stoneman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接