Как принудительно удалить изображение Docker с помощью terraform destroy

#docker #nginx #terraform #hcl #terraform-provider-docker

#docker #nginx #terraform #hcl #terraform-provider-docker

Вопрос:

Я следил за учебным пособием по terraform.io это заставляет меня создать образ и контейнер docker с помощью terraform, а затем уничтожить стек 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 попытался уничтожить изображение terraform destroy : шаблон main.tf был keep-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
  }
}
  

Итак, как мне заставить terraform destroy работать с этим шаблоном, не прибегая к ручному вмешательству с использованием собственных инструментов docker?

Ответ №1:

Сообщение об ошибке указывает, что существует другой контейнер, основанный на том же изображении. Возможно, отдельный контейнер docker, подготовленный за пределами terraform и использующий тот же образ docker nginx, что и в руководстве. Проверьте docker ps -a , есть ли такой контейнер, если это так, просто запустите docker rm -f <container_name> , чтобы удалить его, и ваше terraform destroy должно сработать.

Комментарии:

1. Да! Я остановил контейнеры 10 месяцев назад, которые также полагались на изображение ngnix. После их удаления terraform destroy сработало.