是否可以将单实例Elastic Beanstalk部署配置为在启动新容器之前停止当前容器?

发布时间:2020-07-07 02:55

我正在将旧版本的YouTrack升级到最新的Docker映像。该映像是有状态的,因为它会将其配置和数据存储在已安装到容器的EFS卷上。

在尝试部署版本升级时遇到问题,表现为:

malloc

(引用的日志仅显示相同的错误,后跟一些“活动失败”条目。)

好像好像

  • EB将新图像加载到实例。
  • 在启动新图像的同时,旧图像仍在运行。
  • 我猜测新图像检测到另一个版本的YouTrack已通过已挂载的文件系统锁定数据库,然后退出。

我在this answer中读到,可以将滚动更新配置为对于多实例环境是不可变的,这会强制在每个部署上创建一个新实例,这听起来似乎可以解决问题,但是我的单容器单实例环境没有该选项(滚动更新类型只能为“禁用”)。

我已尝试将Command failed on instance. Return code: 1 Output: 2500dea09a203c18d36aa997159750e8f1b37a7ad0437bc109a5073f38ce24be Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Mon Jul 6 23:43:26 UTC 2020: YouTrack is already running. Check snapshot logs for details. Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI. 插入实例以停止旧容器,但是又有立即重新启动它-已尝试this answereb ssh和{{3} }。

是否有某种方法可以将EB配置为在启动新容器之前停止旧容器(或使用新实例,这虽然不太理想,但可以完成工作)?

回答1

成功!不是永久配置,而是足够好的解决方法-this article给出了有关如何手动停止容器的答案,这只是运行部署的一种情况。

步骤是:

  1. 使用eb ssh -i <instance id> SSH到ElasticBeanstalk实例。
  2. sudo stop eb-docker告诉Upstart停止容器。
  3. docker ps来验证该容器不再运行。
  4. 正常进行EB部署。