我正在使用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是否更好?
感谢任何帮助,谢谢
答案 0 :(得分:2)
几个月后,通过使用Multicontainer 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"
}
]
}
]
}
此方法要求将环境类型设置为Multicontainer Docker,并将安全组附加到允许从数据库客户端访问端口27017的Elastic Beanstalk环境。
答案 1 :(得分: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"
}