在 64 位 Amazon Linux 2/3.2.2 和 Dockerrun.aws.json v3 上运行 Docker 的 Elastic Beanstalk

Posted

技术标签:

【中文标题】在 64 位 Amazon Linux 2/3.2.2 和 Dockerrun.aws.json v3 上运行 Docker 的 Elastic Beanstalk【英文标题】:Elastic Beanstalk with Docker running on 64bit Amazon Linux 2/3.2.2 and Dockerrun.aws.json v3 【发布时间】:2021-03-21 05:11:07 【问题描述】:

有人可以指点我正确的 Dockerrun.aws.json v3 文档。 google了很多次都找不到这个v3文档。

我正在尝试对弹性 beantalk 进行多容器部署 Docker 在 64 位 Amazon Linux 2/3.2.2 上运行,但到目前为止还没有成功。

到目前为止,我使用的 Dockerrun.aws.json v2 格式似乎不适用于这个 docker 平台。


  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    
    "name": "simple-ui",
      "image": "my-image-located-in-ECR",
      "essential": true,
      "memory": 128,
      "portMappings": [
        
          "hostPort": 80,
          "containerPort": 3000
        
      ],
      "command": ["npm","start"]
    
  ]

以下是我在 EB 日志中看到的错误:

2020/12/09 18:55:34.954345 [ERROR] 执行过程中发生错误 命令 [app-deploy] - [Docker 特定构建应用程序]。停止 运行命令。错误:解析 Dockerrun.aws.json 文件失败 错误 json: 字符串结构标记的无效使用,试图解组 未引用的值转换为 int

2020/12/09 18:55:34.954356 [INFO] 执行清理逻辑 2020/12/09 18:55:34.954437 [INFO] CommandService 响应: "status":"FAILURE","api_version":"1.0","re​​sults":["status":"FAILURE","msg":"Engine 执行遇到了 错误。","re​​turncode":1,"events":["msg":"实例部署: 源包中的“Dockerrun.aws.json”指定了不受支持的 版本。 Elastic Beanstalk 仅支持非撰写应用程序的版本 1 以及用于撰写应用程序的版本 3。部署 失败。","timestamp":1607540134,"severity":"ERROR","msg":"Instance 部署失败。有关详细信息,请参阅 'eb-engine.log'.","timestamp":1607540134,"severity":"ERROR"]]

提前感谢您的帮助。 拉宾

【问题讨论】:

【参考方案1】:

在 64 位 Amazon Linux 2/3.2.2 上运行的 Docker

您正在使用Docker running on 64bit Amazon Linux 2/3.2.2,作为错误写入,它仅用于Dockerrun.aws.json v1

要使用v2,你必须使用EB平台:

Multi-container Docker running on 64bit Amazon Linux

【讨论】:

感谢最后我使用了带有 Dockerrun.aws.json v2 的多容器 docker 平台。 AWS 文档说 64 位 Amazon Linux 2 是 docker 平台的较新版本,它应该与 docker-compose 和 Dockerrun.aws.json v3 一起使用,但我无法让它与 docker-compose 一起使用,也找不到 v3 的文档。我还将继续更新这篇文章的标题,以更适合这个问答,再次感谢。【参考方案2】:

多容器 Docker 平台已被弃用,并且缺少许多您可以在 EB 上的普通 jane Docker 平台中找到的功能。但是,正如您在上面注意到的那样,这些文档非常令人困惑。查看此堆栈溢出帖子了解更多详细信息。

How to use multi container docker in Elastic beanstalk using Amazon linux 2?

【讨论】:

【参考方案3】:

对于多容器设置的 64 位 Amazon Linux 2,确保 elasticbeanstalk buildspec.yml 具有这两个文件工件非常重要

artifacts:
    files: 
      - 'Dockerrun.aws.json'
      - 'docker-compose.yml'`

您可以通过以下方式验证文件是否在源中:

Elastic Beanstalk > 应用程序 > 应用程序名称 > 应用程序版本

然后点击最新应用的来源下载文件夹。

我只是将 Dockerrun.aws.json 发送到 EBS,然后想知道为什么我遇到了与您相同的 v1 v3 错误。事后看来,这很有意义,需要 docker-compose.yml。

【讨论】:

【参考方案4】:

我也有同样的担忧。 我将版本1的“Dockerrun.aws.json”中“AWSEBDockerrunVersion”的值改为“3”,然后部署。

然后,奇怪的是,显示了以下消息。

实例部署:源包中的“Dockerrun.aws.json” 指定不受支持的版本。 Elastic Beanstalk 仅支持 非撰写应用程序的版本 1 和撰写应用程序的版本 3。这 部署失败。

这意味着您可以只将 json 版本 1 用于 Amazon Linux 2 AMI。

【讨论】:

以上是关于在 64 位 Amazon Linux 2/3.2.2 和 Dockerrun.aws.json v3 上运行 Docker 的 Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon Linux 中切换到 JDK 7

如何在 AWS EB Amazon Linux 2 平台上为 cron.d 添加环境属性引用

如何为 Django 应用程序将 Amazon Elastic Beanstalk Linux 1 升级到 Linux 2

Elastic Beanstalk 上的 PostgreSQL (Amazon Linux 2)

Amazon Python 2.7 Lambda:DPI-1047:无法加载 64 位 Oracle 客户端库:“libclntsh.so”

如何解决 amazon linux ami 中的 libpcre.so.1()(64bit) 依赖关系