Terraform внутри контейнера удаляет файлы - PullRequest
1 голос
/ 23 апреля 2019

Я обнаружил, что докер на моем хосте Ubuntu 18.04 не сохраняет файлы, смонтированные в контейнере на хосте.

Изображение: hashicorp/terraform

Я использую --mount для привязки каталога к контейнеру, каталог, в котором хранятся файлы конфигурации terraform. Затем я выполняю контейнер, который выполняет terraform, который затем записывает свои файлы состояния и все остальное.
В 70% случаев эти файлы не сохраняются в контейнере. Я вижу, как они создаются на хосте во время работы контейнера, но когда контейнер завершает свою работу, файлы исчезают.
Это проблема с докером или терраформой?

Добавление дополнительной информации:

docker run --mount type=bind,source='/home/david/demo',target=/demo -w /demo -it hashicorp/terraform plan -out tfstate

terraform version 
0.11.13
docker version
Client:
 Version:           18.09.5
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        e8ff056
 Built:             Thu Apr 11 04:43:57 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.5
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       e8ff056
  Built:            Thu Apr 11 04:10:53 2019
  OS/Arch:          linux/amd64
  Experimental:     false

1 Ответ

0 голосов
/ 23 апреля 2019

Прочитав все комментарии к вашему вопросу, я подведу итог, как я проверил ваш сценарий и мой результат

Моя версия докера:

Docker version 18.09.1, build 4c52b90

Terraform:

Terraform v0.11.13
+ provider.azurerm v1.24.0

Я создал папку, в которой содержится мой файл main.tf со следующей конфигурацией:

provider "azurerm" {
    version = "=1.24.0"
    subscription_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    client_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX="
    tenant_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}

resource "azurerm_resource_group" "rg" {
    name = "testResourceGroup"
    location = "westus"
}

Я работаю за прокси-сервером, поэтому я выполнил это в первый раз ипоскольку я подключаюсь к Azure, я использовал init, чтобы иметь возможность загрузить плагин:

docker run --env HTTPS_PROXY="http://myproxyfqdn:port" --rm --mount type=bind,source='/Docker/NFS/terraform',target='/terraform' -w /terraform -it hashicorp/terraform:full init

После этого выполнения папка на моем хосте обновилась, создав папку .terraform с плагином:

# ls -ltra
-rw-r--r-- 1 root root  759 Apr 23 09:00 main.tf
drwxr-xr-x 3 root root 4096 Apr 23 09:09 .terraform

затем я выполнил план с параметром -out, который создал файл моего плана для дальнейшего использования:

# docker run --env HTTPS_PROXY="http://myproxyfqdn:port" --rm --mount type=bind,source='/Docker/NFS/terraform',target='/terraform' -w /terraform -it hashicorp/terraform:full plan -out testplan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + azurerm_resource_group.rg
      id:               <computed>
      location:         "westus"
      name:             "testResourceGroup"
      tags.%:           <computed>

Plan: 1 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------

, который создал файл плана в моей папке:

# ls -ltra
-rw-r--r-- 1 root root  759 Apr 23 09:00 main.tf
drwxr-xr-x 3 root root 4096 Apr 23 09:09 .terraform
-rw-r--r-- 1 root root 5291 Apr 23 09:11 testplan

И затем, применяя план, создал terraform.tfstate:

# docker run --env HTTPS_PROXY="http://myproxyfqdn:port" --rm --mount type=bind,source='/Docker/NFS/terraform',target='/terraform' -w /terraform -it hashicorp/terraform:full apply testplan
azurerm_resource_group.rg: Creating...
  location: "" => "westus"
  name:     "" => "testResourceGroup"
  tags.%:   "" => "<computed>"
azurerm_resource_group.rg: Creation complete after 2s (ID: /subscriptions/8d43a801-58b6-4dde-84cc-...c60e6/resourceGroups/testResourceGroup)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Обновления в папке хоста:

# ls -ltra
-rw-r--r-- 1 root root  759 Apr 23 09:00 main.tf
drwxr-xr-x 3 root root 4096 Apr 23 09:09 .terraform
-rw-r--r-- 1 root root 5291 Apr 23 09:11 testplan
-rw-r--r-- 1 root root 3748 Apr 23 09:11 terraform.tfstate

У меня не было проблем, и при каждом выполнении обновлялись данные в папке хоста.

...