AWS Elastic Beanstalk与docker的版本不对。

问题描述 投票:1回答:1

我正在使用travis将一个docker镜像从Github部署到AWS elastic beanstalk上。这一部分进行得很顺利,实际部署以0退出,而且有一个 .zip 文件在S3桶中。

问题是,由于这是我第一次使用AWS,我使用Sample Application创建了应用程序,因为代码是从Github部署的,部署后,我得到的健康状态为degraded(红色感叹号),并有此消息。

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.

如果我进入 原因 我发现这个。

  • 2020-05-01T16:01:58Z应用部署失败,退出状态1,错误。引擎执行遇到了错误。
  • 错误的应用程序版本 "travis-e55e05342a8cc16f3f28f8e184735667a9531ffa-1588311901"(部署4)。预期的版本 "样本应用程序"(部署1)。

我甚至删除了示例应用程序,并重新部署了上传的那个应用程序,并得到了那个特定的错误。正如你在最后一条消息中所看到的,我已经部署了3次,得到了同样的结果。

最后,我从S3 bucket下载了zip文件,我发现里面基本上是 srcpublic 文件夹以及根目录下的所有文件,如 package.json, .gitignore 所有的docker文件等。


编辑

我在github中创建了两个单独的repos来测试这个.第一个repos是一个Docker容器中的静态页面,很简单。我在EB中创建了一个环境,然后用示例应用启动一切。然后我把修改推送到github上,travis做它的事情并把应用部署到AWS上。这样做很好,应用程序的env也更新了,没有出现任何错误。这是我的repo。https:/github.comrhernandogdocler-static-page-aws。

第二个repo是一个简单的react应用。同样的过程,在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.

这是反应应用的repo。https:/github.comrhernandogreact-docker-awseb。

在Docker方面,在我的本地机器上一切都能正常工作。


EDIT 2

根据@stefansundin的建议,我将应用重新部署到EB上,并查看日志。最后我查看了完整的日志以获取更多信息,发现了这个。varlogcfn-hup.log

2020-05-14 17:07:42,605 [WARNING] Action for aws-eb-command-handler exited with 1, returning FAILURE

我唯一发现错误的地方是在引擎日志文件中。varlogeb-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.

所以基本上这是在docker文件中抱怨这个。FROM node:12-alpine AS builder. 你可以在repo中看到整个文件。https:/github.comrhernandogreact-docker-awsebblobmasterDockerfile。

关键是。为什么在我的本地机器上没有发生这种情况?我怎样才能从编译命令中获取文件并复制到nginx文件夹中?

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

amazon-web-services docker amazon-elastic-beanstalk travis-ci
1个回答
1
投票

我在这里解决了这个问题。

AWS弹性豆茎Docker不支持多阶段构建。

这是一个多阶段Dockerfile的阶段性命名问题。只需使用一个Unamed的


0
投票

AWS文件 据说

要解决这个问题,请启动另一个部署。您可以重新部署您知道可以使用的以前的版本,或者配置您的环境以在部署期间忽略健康检查,并重新部署新版本以强制完成部署。

你也可以识别并终止运行错误应用版本的实例。Elastic Beanstalk会用正确的版本启动实例,以替换你终止的任何实例。使用EB CLI health命令来识别运行错误应用版本的实例。

你可以尝试删除运行你的应用程序的实例,并开始一个新的安装?

另外,你可以使用CodePipeline将你的代码部署到Elastic Beanstalk上,你可以使用你的S3文件夹进行源码阶段,如果你的代码是在travis上构建的,则跳过构建过程,使用deploy阶段将你的新应用安装到你的Elastic Beanstalk上。在将新应用安装到你的环境中时,可能会有一些错误的配置。

我建议你终止你的实例,然后启动新的实例,如果我把你的问题弄错了,我很抱歉。


0
投票

我没有在Elastic Beanstalk上使用过Docker。当我的Ruby on Elastic Beanstalk部署失败时,我发现如果我从日志中请求最后100行,我通常会发现问题。如果你导航到 "Logs" -> "Request Logs" -> "Last 100 Lines",这可能会帮助你。

如果失败了,我就通过SSH进入实例,在日志中查找 /var/log. 也许吧 docker psdocker logs 可能会帮助你。


0
投票

当在平台分支上创建一个新的webserver环境时,选择 "Docker运行在64位亚马逊Linux上 "就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.