我有一个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
亚马逊文档很清楚:
(可选)包括Update键.默认值为"true",并指示Elastic Beanstalk检查存储库,提取对映像的任何更新,并覆盖任何缓存的映像.
但是我必须通过上传新版本的Dockerrun.aws.json描述符来手动更新Beanstalk应用程序.我错过了什么?这应该是那样的吗?
您可以使用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
文档应该更清晰。他们说的是update = true:
EBS会做docker pull
它做了之前docker run
当应用程序第一次启动。它不会持续轮询docker hub。
相比之下,docker run
不先发行a发行a docker pull
将始终使用该计算机的本地存储版本,该版本可能并不总是最新的。
为了实现所需的功能,您需要在Docker Hub上设置一个Webhook,该Webhook调用您控制的应用程序,然后重新构建ELB应用程序。