【问题标题】:How to deploy mongoDB Docker image to Elastic Beanstalk?如何将 mongoDB Docker 映像部署到 Elastic Beanstalk?
【发布时间】:2014-12-16 05:18:34
【问题描述】:

我正在使用 Docker 和 aws Elastic Beanstalk 运行我的多服务架构。其中一项服务是 mongoDB Docker 映像。它应该公开端口 27017,以便其他服务可以连接到该端口中的 mongo DB。不幸的是,Elastic Beanstalk 内部 nginx 仅公开端口 80,因此我的服务无法连接到端口 27017 上的 mongo DB。

我已经看到了一些关于在 /.ebextensions 文件夹中使用一些配置文件的答案 (https://stackoverflow.com/a/24831425/1116959),但我不知道如何使用该解决方法。

我的架构还包括rabbitMQ服务和其他应用程序服务(python+celery)。有谁知道开始使用 Amazon VPC 是否更好?

感谢任何帮助,谢谢

【问题讨论】:

  • 你有想过这个吗?

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


【解决方案1】:

现在几个月后,这可以通过使用多容器 Docker 环境类型:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html

这是我尚未在生产中使用的概念验证 Dockerrun.aws.json:

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "mongo-app",
      "host": {
        "sourcePath": "/var/app/current/mongo-app"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "mongo-app",
      "image": "mongo",
      "essential": true,
      "memory": 6000,
      "command": ["mongod","--storageEngine=wiredTiger","--logpath=/var/log/mongodb/mongo.log"],
    "portMappings": [
        {
          "hostPort": 27017,
          "containerPort": 27017
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "mongo-app",
          "containerPath": "/data/db"
        },
        {
          "sourceVolume": "awseb-logs-mongo-app",
          "containerPath": "/var/log/mongodb"
        }
      ]
    }
  ]
}

此方法要求将环境类型设置为多容器 Docker,并且将安全组附加到 Elastic Beanstalk 环境,以允许从数据库客户端访问端口 27017。

【讨论】:

    【解决方案2】:

    Dockerrun.aws.json 有一个完整的端口部分。你可以使用它来代替底层的 ebextensions 配置文件。

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

    【讨论】:

    • 根据我的经验,它通过 Nginx 反向代理将端口 1234 发布为端口 80。由于 nginx 默认仅支持 http,因此 Mongodb 有线协议不起作用,因为它需要 TCP。
    猜你喜欢
    • 2020-06-23
    • 2016-10-27
    • 2015-11-02
    • 2015-10-02
    • 2020-07-03
    • 1970-01-01
    • 2021-02-03
    • 2021-08-25
    • 2015-06-20
    相关资源
    最近更新 更多