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

Can a single-instance Elastic Beanstalk deploy be configured to stop the current container before starting the new one?

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

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

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.

(引用的日志仅显示相同的错误,后跟一些 'Activity Failed' 条目。)

好像好像:

我在 中读到滚动更新可以配置为多实例环境的不可变,这会强制在每次部署时创建一个新实例,这听起来好像可以解决问题,但我的单容器单实例环境没有该选项(滚动更新类型只能是 'Disabled')。

我已尝试 eb ssh 进入实例以停止旧容器,但某些东西立即再次启动它 - 已尝试 docker update --restart=no <container> 每个 , and the recommended stop command.

有没有什么方法可以配置 EB 在启动新容器之前停止旧容器(或者使用新实例,这是不太可取的,但可以完成工作)?

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

步骤是:

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