AWS Elastic Beanstalk 与 docker 版本不正确

Rod*_*igo 6 amazon-web-services travis-ci docker amazon-elastic-beanstalk

我正在使用 travis 将 docker 映像从 Github 部署到 AWS elastic beanstalk。该部分正常,实际部署以 0 退出,并且.zipS3 存储桶中有一个文件。

问题是,由于这是我第一次使用 AWS,所以我使用示例应用程序创建了应用程序,因为代码是从 Github 部署的,部署后我得到的健康状态为降级(红色感叹号),并显示以下消息:

ERROR
During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.
Run Code Online (Sandbox Code Playgroud)

如果我去原因我发现这个:

  • 应用程序部署于 2020-05-01T16:01:58Z 失败,退出状态为 1 并出现错误:引擎执行遇到错误。
  • 应用程序版本“travis-e55e05342a8cc16f3f28f8e184735667a9531ffa-1588311901”不正确(部署 4)。预期版本“示例应用程序”(部署 1)。

我什至删除了示例应用程序并重新部署了已上传的应用程序并收到了该特定错误。正如您在上一条消息中看到的,我已经部署了 3 次,得到了相同的结果。

src最后,我从 S3 存储桶下载了 zip 文件,基本上在和文件夹中找到了 和public文件夹,以及根文件夹中的所有文件,例如package.json.gitignore所有 docker 文件等。


编辑

我在 github 中创建了两个单独的存储库来测试这一点。第一个存储库是 Docker 容器中的静态页面,非常简单。我在 EB 中创建一个环境并使用示例应用程序启动一切。然后我将更改推送到 github,travis 执行此操作并将应用程序部署到 AWS。这工作正常,并且应用程序的环境已更新,没有错误。这是仓库: https: //github.com/rhernandog/docler-static-page-aws

第二个存储库是一个简单的反应应用程序。相同的过程,使用示例应用程序在 EB 中创建环境。将代码推送到 github,travis 完成它的工作并部署到 AWS。这失败了,我不断收到相同的错误:

Environment health has transitioned from Info to Degraded. Command failed on all
instances. Incorrect application version found on all instances. Expected version
"Sample Application" (deployment 1). Application update failed 1 second ago and
took 2 minutes.
Run Code Online (Sandbox Code Playgroud)

这是 React 应用程序的存储库: https ://github.com/rhernandog/react-docker-awseb

就 Docker 而言,在我的本地机器上一切正常。


编辑2

根据 @stefansundin 建议,我将应用程序重新部署到 EB 并检查日志。我最终查看了完整日志以获取更多信息,并发现了以下内容: /var/log/cfn-hup.log

2020-05-14 17:07:42,605 [WARNING] Action for aws-eb-command-handler exited with 1, returning FAILURE
Run Code Online (Sandbox Code Playgroud)

我发现错误的唯一地方是在引擎日志文件中: /var/log/eb-engine.log

2020/05/14 17:07:42.514601 [INFO] Executing instruction: Docker Specific Build Application
2020/05/14 17:07:42.514605 [INFO] start build docker app
2020/05/14 17:07:42.514615 [INFO] fetch image name
2020/05/14 17:07:42.514639 [INFO] authenticate with ECR if the image is in an ECR repo
2020/05/14 17:07:42.514644 [INFO] pull docker image if update is not false in dockerrun.aws.json
2020/05/14 17:07:42.514657 [INFO] Running command /bin/sh -c docker pull node:12-alpine AS builder
2020/05/14 17:07:42.558923 [ERROR] "docker pull" requires exactly 1 argument.
Run Code Online (Sandbox Code Playgroud)

所以基本上这是在 dockerfile: 中抱怨这一点FROM node:12-alpine AS builder。您可以在存储库中看到整个文件: https: //github.com/rhernandog/react-docker-awseb/blob/master/Dockerfile

关键是:为什么这不会发生在我的本地计算机上?我怎样才能真正从构建命令获取文件并将它们复制到 nginx 文件夹?

这实际上是我在日志文件中发现的唯一错误。

小智 0

AWS 文档

要解决此问题,请启动另一个部署。您可以重新部署您知道有效的先前版本,或者将您的环境配置为在部署期间忽略运行状况检查并重新部署新版本以强制完成部署。

您还可以识别并终止运行错误应用程序版本的实例。Elastic Beanstalk 将启动具有正确版本的实例来替换您终止的任何实例。使用 EB CLI health 命令来识别运行错误应用程序版本的实例。

您可以尝试删除运行应用程序的实例并开始全新安装吗?

此外,您可以使用 CodePipeline 将代码部署到 Elastic Beanstalk,如果您的代码是在 travis 上构建的,则可以使用 S3 文件夹作为源阶段并跳过构建过程,并使用部署阶段将新应用程序安装到 Elastic豆茎。将新应用程序安装到您的环境时可能会出现一些配置错误。

我建议您终止实例并启动新实例,如果我弄错了您的问题,我们深表歉意。