如何将PRE部署脚本添加到AWS Elastic Beanstalk Docker EC2实例,自定义AMI不起作用

我真的很喜欢这样一个事实,即我可以使用Elastic Beanstalk将Docker镜像推送到AWS ECR中。 唯一让我头痛的是缺less有关如何将预部署挂钩添加到Elastic Beanstalk EC2实例的信息?

如果我理解正确,.ebextensions脚本运行POST部署,所以这些不解决我的问题在这里。

我想出了一个解决scheme,我需要将在预部署阶段运行的脚本手动添加到EB EC2实例中。 更具体地说到目录中:

的/ opt / elasticbeanstalk /钩/ appdeploy /预

现在,每次我将新的应用程序版本部署到我的实例中,脚本就被执行了,而这正是我想要的。 但是,如果连接到我的EB环境的负载平衡器启动一个新的EB实例,它显然不包含手动添加的脚本,因此将无法运行我的应用程序。

我还尝试从运行的EB EC2容器创buildAMI,其中包含我的自定义预部署脚本,但由于某些原因,Docker无法在基于自定义AMI的新EB实例上启动。

eb-activity.log说:

[2016-08-29T07:38:36.580Z] INFO [3887] - [Initialization/PreInitStage0/PreInitHook/01setup-docker-options.sh] : Activity execution failed, because: Stopping docker: [FAILED] Starting docker: ..........[FAILED (ElasticBeanstalk::ExternalInvocationError) caused by: Stopping docker: [FAILED] Starting docker: ..........[FAILED] (Executor::NonZeroExitStatus) 

如果我SSH进入EB实例,并尝试手动启动Docker服务,结果相同:

 sudo service docker restart Stopping docker: [FAILED] Starting docker: .......... [FAILED] 

我会高度赞赏,如果有人可以告诉我什么是将PRE DEPLOYMENT脚本添加到Elastic Beanstalk的正确方法,在此先感谢:)

UPDATE

我通过从Elastic Beanstalk默认使用的相同AMI(aws-elasticbeanbean-amzn-2016.03.3.x86_64-docker-hvm-201608240450)启动新实例来解决AMI问题。 我通过将脚本添加到/ opt / elasticbeanstalk / hooks / appdeploy / pre来定制该实例,即使钩子目录结构为:

 /opt/elasticbeanstalk/hooks/ ├── appdeploy │  ├── enact │  ├── post │  └── pre ├── configdeploy │  ├── enact │  ├── post │  └── pre ├── postinit ├── preinit └── restartappserver ├── enact ├── post └── pre 

在这个新鲜的事例中不存在。 当部署Docker应用程序时将完全生成目录结构,并且预先将脚本添加到该目录结构中。

即使这解决了我的问题,我想使用.ebextensions提供的类似解决scheme,但是对于除POST部署脚本以外的其他类似的支持吗?