如何在AWS ElasticBeanstalk中连接多个Docker容器?

时间:2015-09-26 12:31:50

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

我有一个Docker多容器配置,可以在ElasticBeanstalk环境中运行。

EB环境在VPC中运行,在公有子网中,具有单个负载均衡器和单个实例绑定。

看起来所有容器都运行正常,但即使我将它们定义为链接容器,它们也无法相互通信。

我需要做些什么来让所有这些容器互相交谈?

我的Dockerrun.aws.json看起来像这样:

"containerDefinitions": 
    [
        {
            "name": "proxy",
            "image": "nginx",
            "essential": true,
            "memory": 128,
            "portMappings": 
            [
                {
                    "hostPort": 80,
                    "containerPort": 80
                }
            ],
            "links": 
            [
                "webapp"
            ],
            "mountPoints": 
            [
                {
                    "sourceVolume": "nginx-conf",
                    "containerPath": "/etc/nginx/conf.d",
                    "readOnly": true
                },
                {
                    "sourceVolume": "awseb-logs-proxy",
                    "containerPath": "/var/log/nginx"
                }
            ]
        },
        {
            "name": "webapp",
            "image": "jetty",
            "memory": 2048,
            "essential": true,
            "portMappings": 
            [
                {
                    "hostPort": 8080,
                    "containerPort": 8080
                }
            ],
            "links": 
            [
                "mongodb"
            ],
            "mountPoints": 
            [
                {
                    "sourceVolume": "jetty-webapp",
                    "containerPath": "/var/lib/jetty/webapps",
                    "readOnly": false
                },
                {
                    "sourceVolume": "awseb-logs-webapp",
                    "containerPath": "/var/log/jetty"
                }
            ]
        },
        {
            "name": "mongodb",
            "image": "mongo",
            "memory": 1024,
            "essential": true,
            "portMappings": 
            [
                {
                    "hostPort": 27017,
                    "containerPort": 27017
                }
            ],
            "mountPoints": 
            [
                {
                    "sourceVolume": "mongodb-data",
                    "containerPath": "/data/db",
                    "readOnly": false
                }
            ]
        }
    ]

2 个答案:

答案 0 :(得分:1)

在我的情况下,它与安全组无关,因为我公开曝光的所有内容都是80用于Nginx代理。

归结为使用我/ etc / host(webapp,mongodb)中的名称而不是为容器创建的IP。

这修复了我从Nginx到Jetty和Jetty到MongoDB的连接。

答案 1 :(得分:0)

2017年,使用容器定义:links以及要连接的Docker容器的名称。 Docker的内置网桥将从那里建立连接。