Docker контейнеры - отсутствует атрибут - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно было пользовательское изображение centos с установленным докером.Поэтому я создал его с помощью изображения centos и пометил его как пользовательский (см. Ниже).

$ docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              custom              84766562f881        4 hours ago         664MB
centos/systemd      latest              05d3c1e2d0c1        7 weeks ago         202MB

Я пытаюсь развернуть несколько контейнеров, используя Terraform, на моем локальном компьютере, каждыйс уникальным именем, которое приходит из другого файла.Образы докера находятся на локальной машине.Вот код TF.

$ cat main.tf

provider "docker" {

}
resource "docker_image" "centos" {
  name = "centos:custom"
}
resource "docker_container" "app_swarm" {
  image = "${docker_image.centos.custom}"
  count = "${length(var.docker_cont)}"
  name = "${element(var.docker_cont, count.index)}"
}

Когда я запускаю terraform apply, я получаю эту ошибку, которую я не уверен, как исправить.Может кто-нибудь указать мне правильное направление, пожалуйста?

Error: Error running plan: 1 error(s) occurred:
* docker_container.app_swarm: 3 error(s) occurred:
* docker_container.app_swarm[0]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'
* docker_container.app_swarm[1]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'
* docker_container.app_swarm[2]: Resource 'docker_image.centos' does not have attribute 'custom' for variable 'docker_image.centos.custom'

Да, другой файл существует с именами, это простой список.

РЕДАКТИРОВАТЬ:

Спасибо Дэвид,попробовал ваше предложение и изменил код так:

provider "docker" {

}
resource "docker_image" "centos" {
  name = "centos:custom"
}
resource "docker_container" "app_swarm" {
  image = "${docker_image.centos.latest}"
  count = "${length(var.docker_cont)}"
  name = "${element(var.docker_cont, count.index)}"
}

Но теперь я получаю эту ошибку.

Error: Error applying plan:

1 error(s) occurred:

* docker_image.centos: 1 error(s) occurred:
* docker_image.centos: Unable to read Docker image into resource: Unable to pull image centos:custom: error pulling image centos:custom: Error response from daemon: manifest for centos:custom not found

Я думаю, мне нужно будет настроить локальный репозиторий Docker, чтобы получитьработает, но я не уверен?

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете использовать только определенные поля, перечисленные в документации docker_image ресурса в интерполяции ${docker_image.centos...}.В частности, даже если вы не используете тег :latest, вам нужна ссылка на свойство .latest:

image = "${docker_image.centos.latest}"

(Если на самом деле это изображение, созданное вами локально, вы можете такжехотите указать параметр keep_locally на вашем ресурсе docker_image, чтобы terraform destroy не удалил его.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...