#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
сработало.