2014-10-21 3 views
11

Я управляю своей архитектурой нескольких сервисов, используя Docker и aws Elastic Beanstalk. Одной из этих услуг является изображение MockoDB Docker. Предполагается, что он откроет порт 27017, чтобы другие службы могли подключаться к базе данных mongo в этом порту. К сожалению, внутренний nginx из эластичного beanstalk предоставляет только порт 80, поэтому мои сервисы не могут подключиться к mongo DB на порту 27017.Как развернуть изображение докеры mongoDB на эластичный бобовый стебель?

Я видел несколько ответов (https://stackoverflow.com/a/24831425/1116959) вокруг некоторых файлов конфигурации внутри папки /.ebextensions , но я не знаю, как заставить это работать с этим обходным путем.

Моя архитектура также включает службу rabbitMQ и другие сервисы приложений (python + celery). Кто-нибудь знает, лучше ли начать использовать Amazon VPC?

Любая помощь приветствуется, спасибо

+0

Вы когда-нибудь это понимали? – gmaniac

ответ

1

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" 
} 
+0

Основываясь на моем опыте, он публикует порт 1234 через обратный прокси-сервер Nginx в качестве порта 80. Поскольку nginx по умолчанию поддерживает только http, модемный протокол Mongodb не работает, поскольку он требует TCP. –

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" 
     } 
     ] 
    } 
    ] 
} 

Этот подход требует, чтобы тип среды устанавливается в многоконтейнерным Докер и что группа безопасности привязанный к среде Elastic Beanstalk, которая позволяет получить доступ к порту 27017 от клиентов базы данных.