Развертывание docker на AWS beanstalk с помощью Docker composer

Я пытаюсь развернуть несколько узлов.JS micro services на AWS beanstalk, и я хочу, чтобы они были развернуты в одном экземпляре. Это мой первый раз для развертывания нескольких служб, поэтому есть некоторые сбои, мне нужен кто-то, чтобы помочь мне. Поэтому я сначала попытался упаковать их в контейнер docker. Тем временем я использую Docker composer для управления структурой. Он работает локально на моей виртуальной машине, но когда я развернул его на beanstalk, я столкнулся с несколькими проблемами.

Что Я знаю:

  1. Я знаю, что должен выбрать развертывание в качестве докера с несколькими контейнерами.
  2. лучшая практика для управления несколькими узлами.службы js используют Docker composer.
  3. мне нужно dockerrun.aws.json для узла.приложение на JS.
  4. мне нужно создать определение задачи для этого экземпляра ecs.

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

  1. Я могу только найти dockerrun.aws.json и task_definition.json шаблон для PHP, поэтому я не могу проверить, если моя конфигурация узел.Яш в этих двух файлах json находятся в правильной форме.
  2. кажется docker-compose.yml, dockerrun.aws.json и task_definition.json выполняют аналогичные задания. Я должен держать task_definition, но мне все еще нужен dockerrun.АРМ.в JSON?
  3. Я попытался запустить задачу в 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"
}

3 ответов


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

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

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

надеюсь, что это помогает.


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


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

dockerfile.aws.json должен быть именно Dockerfile.aws.json