来自ECR错误的AWS Elastic Beanstalk Docker错误“在Dockerrun.aws.json中未指定Docker映像”

时间:2019-01-15 20:03:27

标签: amazon-web-services docker amazon-elastic-beanstalk aws-ecr

我正在尝试将AWS ECR中的docker映像部署到Elastic Beanstalk。我已经为S3和ECR设置了Elastic Beanstalk的所有必需权限。这些服务之间的通信似乎正常,但是尝试启动Elastic Beanstalk环境时出现以下错误:

  1. No Docker image specified in either Dockerfile or Dockerrun.aws.json. Abort deployment.
  2. [Instance: i-01cf0bac1863e4eda] Command failed on instance. Return code: 1 Output: No Docker image specified in either Dockerfile or Dockerrun.aws.json. Abort deployment. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

我要上传一个指向Dockerrun.aws.json的文件,它指向ECR上的图像。以下是我的Dockerrun.aws.json文件:

{
  "AWSEBDockerrunVersion": "1",
  "containerDefinitions": {
    "Name": "***.eu-central-1.amazonaws.com/***:latest",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

泊坞窗映像确实存在于containerDefinitions Name字段中指定位置的ECR上。

我在这里想念东西吗?

3 个答案:

答案 0 :(得分:1)

结果证明containerDefinitions在这种情况下不适用。我不确定在哪里找到它(也许来自某处的dockerrun示例)。实际的属性名称如下:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "***.eu-central-1.amazonaws.com/***:latest",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

答案 1 :(得分:0)

您什么都不丢失。有同样的问题。这是因为Dockerfile编码。使用UTF-8而不是UTF-8-BOM。此处有更多详细信息: https://github.com/verygood-ops/eb_docker/blob/master/elasticbeanstalk/hooks/appdeploy/pre/03build.sh#L58

    FROM_IMAGE=`cat Dockerfile | grep -i ^FROM | head -n 1 | awk '{ print $2 }' | sed $'s/\r//'`

...

答案 2 :(得分:0)

在以“在64位Amazon Linux 2 上运行的Docker”为平台的环境中尝试使用AWSEBDockerrunVersion 1模式时,我遇到了此错误。该错误消息没有解决任何问题。

创建一个新环境“在64位Amazon Linux上运行Docker”并重新部署我原来的Dockerrun.aws.json可以为我解决此问题。您也可以将Dockerrun.aws.json迁移到版本2架构。