AWS ElasticBeanstalk Multidocker 没有使用正确的 Cmd 创建 ECS 任务
Posted
技术标签:
【中文标题】AWS ElasticBeanstalk Multidocker 没有使用正确的 Cmd 创建 ECS 任务【英文标题】:AWS ElasticBeanstalk Multidocker is not creating an ECS task with a correct Cmd 【发布时间】:2017-07-13 00:38:30 【问题描述】:我正在使用 multidocker 选项在 AWS ElasticBeanstalk 上部署我的 node 应用程序。该应用似乎部署成功,但是,我注意到该应用(在我的 docker 中)没有实际运行。
当我docker inspect <container_id>
运行容器时,看到"Cmd": null
。如果我检查 beanstalk 创建的 ECS 任务定义,我还会看到 "command": null"
/
然而,如果我手动运行容器(通过docker run -d myimage:latest
),我看到"Cmd": ["node", "server.js"]
并且应用程序正常运行。这是包含在我的 Dockerfile 中的正确 CMD
。
为什么我的 ECS 任务定义没有正确读取我的 docker 映像中的 CMD
? 我是否应该在我的 Dockerrun.aws.json
中添加一个命令?我找不到任何文档。
Dockerrun.aws.json:
"AWSEBDockerrunVersion": 2,
"volumes": [
"name": "node-app",
"host":
"sourcePath": "/var/app/current/node-app"
],
"containerDefinitions": [
"name": "node-app",
"image": "1234565.dkr.ecr.us-east-1.amazonaws.com/my-node-app:testing",
"essential": true,
"memory": 128,
"portMappings": [
"hostPort": 3000,
"containerPort": 3000
]
]
【问题讨论】:
查看您的 Dockerfile 可能会有所帮助。我在 AWS Beanstalk 中运行了多个 docker 容器,但从未遇到过这个问题。 Dockerfile 中的 CMD 应该在容器部署后被拾取并启动。 【参考方案1】:我也有同样的问题。对我来说,事实证明 entrypoint 确实负责运行命令。但是问题仍然存在,但是当您检查图像和检查容器时,看看您的入口点是什么样子可能会很有趣。
另请参阅: What is the difference between CMD and ENTRYPOINT in a Dockerfile?
【讨论】:
以上是关于AWS ElasticBeanstalk Multidocker 没有使用正确的 Cmd 创建 ECS 任务的主要内容,如果未能解决你的问题,请参考以下文章
从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS
在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis
是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?