我正在尝试在AWS beanstalk上部署多个node.js微服务,我希望它们部署在同一个实例上。这是我第一次部署多项服务,所以有些失败我需要有人来帮助我。所以,我首先尝试将它们打包到docker容器中。同时我正在使用docker composer来管理结构。它在我的虚拟机中启动并运行,但是当我将它部署到beanstalk上时,我遇到了一些问题。
我所知道的:
dockerrun.aws.json
用于node.js app。我遇到问题:
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任务定义(或空定义文件)
因为我的任务将永远停止。如果我可以查看日志,那么我就会更容易进行故障排除。
这是我的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"
}
答案 0 :(得分:8)
我遇到了类似的问题,结果我直接在Archive.zip文件中存档了包含文件夹,因此在Archive.zip文件中提供了这个结构:
RootFolder
- Dockerrun.aws.json
- Other files...
事实证明,通过仅归档RootFolder的内容(而不是文件夹本身),Amazon Beanstalk识别出ECS任务定义文件。
希望这有帮助。
答案 1 :(得分:1)
类似的问题。为我修复的是使用CLI工具而不是自己压缩,只需运行eb deploy
工作。
答案 2 :(得分:1)
对我来说,只是确保文件名与AWS documentation中所述的确切外壳相匹配。
dockerfile.aws.json
必须完全Dockerfile.aws.json
答案 3 :(得分:0)
对我来说,codecommit不是。然后在git中添加Dockerrun.aws.json后就可以使用了。
答案 4 :(得分:0)
由于错误,我到达了这里。我的问题是,我使用以下标签进行部署:
eb deploy --label MY_LABEL
您需要做的是使用'
进行部署:
eb deploy --label 'MY_LABEL'
答案 5 :(得分:0)
我也遇到了这个问题。对我来说,问题是git中没有添加Dockerrun.aws.json。 eb deploy
检测到git的存在。
我跑了eb deploy --verbose
来解决这个问题:
INFO: Getting version label from git with git-describe
INFO: creating zip using git archive HEAD
它进一步列出了将进入zip的所有文件,而Dockerrun.aws.json不存在。
git status
报告此:
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
Dockerrun.aws.json
nothing added to commit but untracked files present (use "git add" to track)
将文件添加到git并提交帮助。
在我的特定情况下,我可以在脚本化部署中删除.git
目录。
答案 6 :(得分:0)
就我而言,创建Dockerrun.aws.json
文件后我没有提交它,因此使用eb deploy
失败并出现相同的错误。