【问题标题】:.ebextensions with Docker on elasticbeanstalk.ebextensions 在 elasticbeanstalk 上使用 Docker
【发布时间】:2015-03-22 02:19:49
【问题描述】:

我正在尝试在弹性 beanstalk Docker 实例上配置 nginx 以允许使用 websocket。使用 here 找到的信息,我将 .ebextensions/01_files.config 添加到我正在部署的 zip 中。

该 zip 包含 .ebextensions/01_files.config、一个 Dockerfile 和我的应用程序的 tgz。

01_files.config的内容如下:

files:
    "/etc/nginx/conf.d/websocketupgrade.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
            proxy_set_header        Upgrade         $http_upgrade;
            proxy_set_header        Connection      "upgrade";

Elastic beanstalk 似乎忽略了我的 .ebextensions。文件 /etc/nginx/conf.d/websocketupgrade.conf 永远不会被写入。

在弹性 beantalk 上将 .ebextensions 与 Docker 容器一起使用的正确方法是什么?

【问题讨论】:

    标签: amazon-web-services nginx websocket docker amazon-elastic-beanstalk


    【解决方案1】:

    我很确定 ElasticBeanstalk 会在设置应用程序的过程中覆盖 /etc/nginx/conf.d/,因此当应用程序启动时,您使用 ebextensions 放置的任何内容都会消失。

    要解决此问题,您需要更改暂存区,而不是最终目的地。我不确定 elasticbeanstalk nginx 部署的暂存区是什么,但是如果您查看

    /var/log/eb-activity.log
    

    你应该可以弄明白的。

    你应该使用:

    container_command:
    

    对暂存区进行更改的指令。

    【讨论】:

      【解决方案2】:

      Elastic Beanstalk 现在支持 docker,黑客攻击更少,您应该使用 Dockerfile and Dockerrun.aws.json

      只需基于offical nginx 映像创建一个新容器,然后添加您在上面发布的 conf 文件。然后使用 dockerrun 文件拉入您的 nginx 映像(参见下面的示例)。

      {
        "AWSEBDockerrunVersion": "1",
        "Authentication": {
          "Bucket": "my-bucket",
          "Key": "mydockercfg"
        },
        "Image": {
          "Name": "me/my-nginx-image",
          "Update": "true"
        },
        "Ports": [
          {
            "ContainerPort": "80"
          }
        ],
        "Volumes": [
          {
            "HostDirectory": "/var/",
            "ContainerDirectory": "/etc/mysql"
          }
        ],
        "Logging": "/var/log/nginx"
      }
      

      【讨论】:

      • 对不起,也许我不清楚,但我已经按照您的建议使用了弹性 beanstalk Docker 容器类型。默认情况下,Nginx 是弹性 beanstalk docker 容器中 docker 容器的反向代理。我需要配置 nginx 以允许 websockets。问题是弹性 beantalk 在我部署时似乎忽略了我的 .ebextensions。
      • 确保 .ebextensions 文件夹位于发送到 Elastic Beanstalk 的存档中。似乎最简单的解决方案是将此文件夹添加到您的 git repo (eb deploy 可能正在做 git --archive 引擎盖下,虽然不知道)。
      猜你喜欢
      • 2023-03-22
      • 2017-05-24
      • 2020-01-05
      • 2017-07-02
      • 2020-12-14
      • 2020-11-02
      • 2016-06-17
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多