2014-10-21 23 views
11

Tôi đang chạy kiến ​​trúc đa dịch vụ của mình bằng Docker và aws Elastic Beanstalk. Một trong những dịch vụ đó là một hình ảnh MongoDB Docker. Nó được cho là để lộ cổng 27017 để các dịch vụ khác có thể kết nối với DB mongo trong cổng đó. Thật không may Elastic Beanstalk nội bộ nginx chỉ phơi bày cổng 80, vì vậy dịch vụ của tôi không thể kết nối với mongo DB trên cổng 27017.Làm thế nào để triển khai hình ảnh MongoDB Docker đến cây đậu đàn hồi?

Tôi đã xem một số câu trả lời (https://stackoverflow.com/a/24831425/1116959) xung quanh sử dụng một số tệp cấu hình bên trong thư mục /.ebextensions , nhưng tôi không biết làm thế nào để có được điều này làm việc với workaround đó.

Kiến trúc của tôi cũng bao gồm dịch vụ thỏMQ và các dịch vụ ứng dụng khác (python + cần tây). Có ai biết nếu nó tốt hơn để bắt đầu sử dụng Amazon VPC?

Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn

+0

bạn đã bao giờ tìm ra điều này chưa? – gmaniac

Trả lời

1

Dockerrun.aws.json có toàn bộ phần cho cổng. Bạn có thể sử dụng nó thay vì tệp cấu hình ebextensions lớp thấp hơn.

{ 
    "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

Dựa trên kinh nghiệm của tôi, việc này xuất bản cổng 1234 thông qua proxy đảo ngược Nginx như cổng 80. Theo nginx theo mặc định chỉ hỗ trợ http, giao thức dây Mongodb không hoạt động vì nó yêu cầu TCP. –

1

Bây giờ một vài tháng sau, điều này có thể thực hiện bằng cách sử dụng loại môi trường Trình kết nối đa nhân tố: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html.

Dưới đây là một bằng chứng của khái niệm Dockerrun.aws.json mà tôi vẫn chưa được sử dụng trong sản xuất:

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

Cách tiếp cận này đòi hỏi các loại môi trường được thiết lập để Multicontainer Docker và rằng một nhóm an ninh là gắn với môi trường Elastic Beanstalk cho phép truy cập cổng 27017 từ các máy khách cơ sở dữ liệu.

Các vấn đề liên quan