我有一个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应用程序。我错过了什么?这应该是那样的吗?
答案 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应用。