Exposing multiple ports from Docker within Elastic Beanstalk

thinkski picture thinkski · Sep 14, 2014 · Viewed 10.4k times · Source

From reading the AWS documentation, it appears that when using Docker as the platform on Elastic Beanstalk (EB) (as opposed to Tomcat, etc.), only a single port can be exposed. I'm trying to understand why Amazon created this restriction -- seems that you now can't even serve both HTTP and HTTPS.

I'd like to use Docker as the container since it allows me to run several interconnected server processes within the same container, some of which require multiple ports (e.g. RTSP). Are there any workarounds for this kind of application, where say an RTSP and HTTP server can both be running within the same Docker container on EB?

Answer

Prabu picture Prabu · Nov 3, 2017

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.