Exposing multiple ports from Docker within Elastic Beanstalk Exposing multiple ports from Docker within Elastic Beanstalk docker docker

Exposing multiple ports from Docker within Elastic Beanstalk


Even though none of the documentation explains it, Single Container Docker Environment does support mapping multiple ports

{    "AWSEBDockerrunVersion": "1",    "Ports": [        {            "ContainerPort": "8080"        },        {            "HostPort": "9000",            "ContainerPort": "8090"        }    ]}

With above configuration, port 8080 of docker will get mapped to host machines port 80 and port 8090 of docker will get mapped to host machine's port 9000.

To be more clear always the first port in the list will get mapped to host machine's port 80 and remaining will get mapped to specified hostPort (or) the same as container port in absence of host port.


In its current form, the Docker support in Elastic Beanstalk is marginal at best. FWIW I wrote a blog post evaluating EB that touched on this. I found that in addition to your observation about ports, it's not possible to run multiple containers, nor to even customize the docker run command. Hopefully they'll extend support in a future update.


You could write an on-start config file for Elastic Beanstalk's LoadBalancer/ReversProxy to forward the additional ports to its EC2 instance(s). an example from Ben Delarre :

"Resources" : {  "AWSEBLoadBalancerSecurityGroup": {    "Type" : "AWS::EC2::SecurityGroup",    "Properties" : {      "GroupDescription" : "Enable 80 inbound and 8080 outbound",      "VpcId": "vpc-un1que1d",      "SecurityGroupIngress" : [ {        "IpProtocol" : "tcp",        "FromPort" : "80",        "ToPort" : "80",        "CidrIp" : "0.0.0.0/0"      }],      "SecurityGroupEgress": [ {        "IpProtocol" : "tcp",        "FromPort" : "8080",        "ToPort" : "8080",        "CidrIp" : "0.0.0.0/0"      } ]    }  },  "AWSEBLoadBalancer" : {    "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",    "Properties" : {      "Subnets": ["subnet-un1que1d2"],      "Listeners" : [ {        "LoadBalancerPort" : "80",        "InstancePort" : "8080",        "Protocol" : "HTTP"      } ]    }  }}

Ref: