Разверните докер на beanstalk AWS с помощью докер-композитора

Я пытаюсь развернуть несколько микросервисов node.js на beanstalk AWS, и я хочу, чтобы они были развернуты в одном экземпляре. Это мой первый раз для развертывания нескольких сервисов, поэтому есть некоторые неудачи, мне нужен кто-то, кто поможет мне. Итак, я попытался сначала упаковать их в контейнер для докеров. Тем временем я использую докер-композитор для управления структурой. Он запускался и запускался локально на моей виртуальной машине, но когда я развернул его на beanstalk, я встретил несколько проблем.

Что я знаю:

  • Я знаю, что мне нужно выбирать для развертывания в виде многоконтейнерной докеры.
  • Лучшей практикой управления несколькими службами node.js является использование докер-композитора.
  • Мне нужно приложение dockerrun.aws.json для node.js.
  • Мне нужно создать определение задачи для этого экземпляра ecs.

Где у меня проблемы:

  • Я могу найти только dockerrun.aws.json и task_definition.json шаблон для php, поэтому я не могу проверить, соответствует ли моя конфигурация для node.js в этих двух файлах json находятся в правильной форме.
  • Кажется, что docker-compose.yml, dockerrun.aws.json и task_definition.json выполняют аналогичные задания. Я должен держать task_definition, но мне все еще нужен dockerrun.aws.json?
  • Я попытался запустить задачу в ecs, но сразу же остановился. Как проверить журнал для задачи?

Я получил:

Нет определения задачи ecs (или пустой файл определения), найденного в среде

потому что моя задача всегда будет немедленно остановлена. Если я могу проверить журнал, мне будет намного легче справляться с проблемами.

Вот мой task_definition.json:

{
  "requiresAttributes": [],
  "taskDefinitionArn": "arn:aws:ecs:us-east-1:231440562752:task-definition/ComposerExample:1",
  "status": "ACTIVE",
  "revision": 1,
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "memory": 100,
      "extraHosts": null,
      "dnsServers": null,
      "disableNetworking": null,
      "dnsSearchDomains": null,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "hostname": null,
      "essential": true,
      "entryPoint": null,
      "mountPoints": [
        {
          "containerPath": "/usr/share/nginx/html",
          "sourceVolume": "webdata",
          "readOnly": true
        }
      ],
      "name": "nginxexpressredisnodemon_nginx_1",
      "ulimits": null,
      "dockerSecurityOptions": null,
      "environment": [],
      "links": null,
      "workingDirectory": null,
      "readonlyRootFilesystem": null,
      "image": "nginxexpressredisnodemon_nginx",
      "command": null,
      "user": null,
      "dockerLabels": null,
      "logConfiguration": null,
      "cpu": 99,
      "privileged": null
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": "/ecs/webdata"
      },
      "name": "webdata"
    }
  ],
  "family": "ComposerExample"
}

Ответ 1

У меня была аналогичная проблема, и оказалось, что я архивировал содержащую папку непосредственно в файле Archive.zip, тем самым предоставив мне эту структуру в файле Archive.zip:

RootFolder
    - Dockerrun.aws.json
    - Other files...

Оказалось, что путем архивирования только содержимого RootFolder (а не самой папки) Amazon Beanstalk распознал файл определения задачи ECS.

Надеюсь, что это поможет.

Ответ 2

Аналогичная проблема. Для меня это было связано с использованием инструментов CLI вместо того, чтобы застегиваться, просто работая eb deploy.

Ответ 3

Для меня это был просто случай обеспечения того, чтобы имя файла соответствовало точной оболочке, как описано в Документация AWS.

dockerfile.aws.json должен был быть точно dockerfile.aws.json

Ответ 4

Для меня codecommit не было. Затем после добавления Dockerrun.aws.json в git все работает.

Ответ 5

Я попал сюда из-за ошибки. Моя проблема заключалась в том, что я развертывал с меткой, используя:

eb deploy --label MY_LABEL

Что вам нужно сделать, это развернуть с помощью ':

eb deploy --label 'MY_LABEL'