【问题标题】:AWS Beanstalk docker image automatic update doesn't workAWS Beanstalk docker 映像自动更新不起作用
【发布时间】:2016-03-18 10:08:11
【问题描述】:

我有一个 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 应用程序。我错过了什么?它应该这样工作吗?

【问题讨论】:

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


    【解决方案1】:

    您可以使用 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

    【讨论】:

      【解决方案2】:

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

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

      相比之下,发出docker run 而不首先执行docker pull 将始终使用该计算机的本地存储版本,这可能并不总是最新的。

      为了实现你想要的,你需要设置一个webhook on Docker Hub,它调用你控制的应用程序,重建你的ELB应用程序。

      【讨论】:

      • 我认为你基本上是对的。我只是不确定重启是否足够,是否需要重建。这就是我必须做的,另一个人在他的博客中说了同样的话。如果您同意,请更新您的 anwser,我会接受。
      • 更新:实际上,不要重建你的应用程序,它需要很长时间。上传相同的 Dockerrun.aws.json 并增加版本号会更好。
      • 查看stackoverflow.com/a/41715702/3090068的答案;它展示了如何重做 docker pulldocker run
      • 我可以询问更多细节吗?我的 dockerrun.aws.json 使用 docker 镜像 myimage:latest。每当我重新部署(通过从 eb-cli 发送 eb deploy)时,当前最新的图像都会被拉取并启动。我怎样才能自动化这个 eb deployaws elasticbeanstalk update-environment ...不是也需要手动发出吗?
      猜你喜欢
      • 2019-06-09
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2016-08-02
      • 2019-09-29
      • 2016-10-27
      • 2016-06-20
      相关资源
      最近更新 更多