AWS Beanstalk泊坞窗图像自动更新不起作用

我有一个node.js应用程序打包在托pipe在公共存储库中的docker镜像中。

我已经成功在AWS Beanstalk泊坞窗应用程序中部署了该映像。 问题在于,当我更新公共存储库中的映像时,我期待着Beanstalk应用程序自动更新,如下configurationbuild议。

Dockerrun.aws.json:

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "peveuve/dynamio-payment-service", "Update": "true" }, "Ports": [ { "ContainerPort": "8000" } ], "Logging": "/var/log/dynamio" } 

Dockerfile非常简单:

 FROM node:4.2.1-onbuild # Environment variables ENV NODE_ENV test ENV PORT 8000 # expose application port outside EXPOSE $PORT 

亚马逊的文档很清楚:

可以包含更新密钥。 默认值为“true”,并指示Elastic Beanstalk检查存储库,将任何更新提取到图像,并覆盖任何caching的图像。

但是我必须通过上传新版本的Dockerrun.aws.json描述符来手动更新Beanstalk应用程序。 我错过了什么? 它应该这样工作吗?

文件应该更清楚。 他们所说的是update = true:

在应用程序首次启动时,EBS将在docker run之前执行docker pull 。 它不会持续调查docker中心。

相比之下, docker run没有首先执行docker pull情况下发出docker run将始终使用本地存储的那台机器的版本,这可能并不总是最新版本。

为了达到你想要的效果,你需要在Docker Hub上设置一个webhook ,调用你控制的应用程序,重build你的ELB应用程序。

您可以使用aws命令行工具来触发更新:

 aws elasticbeanstalk update-environment --application-name [your_app_name] --environment-name [your_environment_name] --version-label [your_version_label] 

您可以指定包含Dockerrun.aws.json文件的版本,这样新版本将不会被添加到应用程序中。 在这种情况下,Dockerrun文件作为应用程序的“源”,但它只告诉aws拉泊坞镜像,因此在Elastic Beanstalk中为应用程序创build新版本将是多余的(除非使用专门标记的docker镜像在Dockerrun文件中)

链接:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html http://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateEnvironment.htm