Разверните докер на 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'