来自 ECR 的 AWS Elastic Beanstalk Docker 错误 "No Docker image specified in Dockerrun.aws.json"



我正在尝试将 docker 镜像从 AWS ECR 部署到 Elastic Beanstalk。我已经为 Elastic Beanstalk 设置了对 S3 和 ECR 的所有必需权限。这些服务之间的通信似乎很好,但是在尝试启动 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.

我正在上传一个指向 ECR 上图像的单个Dockerrun.aws.json。以下是我的Dockerrun.aws.json文件:

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

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

我在这里错过了什么吗?

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

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

你没有错过任何东西。有同样的问题。这是因为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//'`

我在尝试在运行"在 64 位 Amazon Linux 上运行的 Docker 2"作为平台的环境中使用AWSEBDockerrunVersion 1架构时遇到了此错误。错误消息不会泄露任何信息。

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

相关内容

最新更新