AWS Beanstalk docker镜像自动更新不起作用

时间:2015-12-12 15:16:45

标签: amazon-web-services deployment docker elastic-beanstalk

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

我已成功在AWS Beanstalk docker应用程序中部署该映像。 问题是,当我更新公共存储库中的映像时,我希望Beanstalk应用程序能够自动更新,如下面的配置所示。

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检查存储库,提取任何更新   到图像,并覆盖任何缓存的图像。

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

2 个答案:

答案 0 :(得分:6)

您可以使用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提取docker镜像,因此在Elastic Beanstalk中为应用程序创建新版本将是多余的(除非您使用特定标记的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

答案 1 :(得分:4)

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

首次启动应用程序时,EBS会在docker pull之前执行docker run。它不会继续轮询docker hub。

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

为了实现您想要的效果,您需要设置webhook on Docker Hub,调用您控制的应用程序,重建您的ELB应用。