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 任务的主要内容,如果未能解决你的问题,请参考以下文章

强制 https aws elasticbeanstalk

从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS

在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis

是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?

Rails 部署到 AWS ElasticBeanstalk/RDS 失败

AWS Elasticbeanstalk 部署错误