Aar*_*sak 8 amazon-s3 amazon-ec2 amazon-web-services docker amazon-elastic-beanstalk
我在一个repo中有一个Dockerfile/ elastic-beanstalkapp git,可以从应用程序的当前版本中获取tarball s3并启动它.这在我第一次部署时效果很好; Docker容器构建完成,应用程序启动并正确运行.问题出现在我对应用程序进行更改,重新上传tarball s3并运行之后eb deploy.
$ eb deploy
INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
INFO: Successfully built aws_beanstalk/staging-app
INFO: Successfully pulled yadayada/blahblah:latest
INFO: Docker container 06608fa37b2c is running aws_beanstalk/current-app.
INFO: New application version was deployed to running EC2 instances.
INFO: Environment update completed successfully.
Run Code Online (Sandbox Code Playgroud)
但该应用尚未更新*.elasticbeanstalk.com.我猜测,因为Dockerfile没有改变,docker不会重建容器(并拉动最新的应用程序tarball).我希望能够强制重建,但该eb工具似乎没有这个选项.我可以从网站控制台强制重建,但显然这对自动化没有好处.我承诺每次改变git,我希望eb能用它来知道重建是必要的,但似乎没有任何区别.我是否以错误的方式使用docker/elastic-beanstalk?理想情况下,我想承诺git并让beanstalk自动重新安装应用程序.
使用Docker for CI的问题在于它不像脚本那样,除非Dockerfile更改,否则它不会重建.因此,您必须在启动包装器脚本中而不是在启动包装脚本中放置需要重建的内容Dockerfile.所以我将下载应用程序tarball的部分移动到Dockerfile安装到容器的脚本中.然后当容器启动时,下载并解压缩tarball,然后才能启动真正的应用程序.这种方法有效,现在重新部署可以按预期工作.它有点加重调试过程,并让我认为使用Docker和EB for CI是一个小问题.
我想知道当您在 Beanstalk 中定义实例时是否可以尝试使用用户数据输入?像这样的东西可能会在启动结束时触发:
#!/bin/bash
cd /app/dir/home
sudo docker pull username/container
... other things you may need to do ...
Run Code Online (Sandbox Code Playgroud)
您可以参考有关用户数据脚本和可执行文件的更多信息: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |