dockerplayframework-2.6

Unable to connect with container at address /0.0.0.0:9000


My container of play/scala application starts at [info] p.c.s.AkkaHttpServer - Listening for HTTP on /0.0.0.0:9000. But I am unable to connect to it from the browser. I am running the container on my windows machine after having build the image using Docker for Windows

The Dockerfile is

FROM openjdk:8
WORKDIR deploy
COPY target/universal/myapp-1.0.zip .

COPY conf/logback_dev.xml ./logback.xml
COPY conf/application_dev.conf ./application.conf
RUN unzip myapp-1.0.zip
RUN chmod +x myapp-1.0/bin/myapp
EXPOSE 9000
ENTRYPOINT myapp-1.0/bin/myapp -Dplay.http.secret.key=changemeplease -Dlogger.file=/deploy/logback.xml -Dconfig.file=/deploy/application.conf

I am starting the container as docker run myApp -p 9000:9000 -network="host" and also tried docker run myApp -p 9000:9000 -network="host"

UPDATE

this is interesting. If I specify image name before port then the application isn't reachable

docker run  myApp -p 9000:9000

In docker container ps -a, I see (no mapping of localhost:9000 to 9000)

C:\Users\manuc>docker container ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
4d16547cd96d        myApp   "/bin/sh -c 'myApp…"   10 seconds ago      Up 9 seconds        9000/tcp, 9042/tcp   ecstatic_bell

but if I specify port before image name, then the application is reachable

docker run  -p 9000:9000 myApp

In docker container ps -a, I see mapping of localhost:9000 -> 9000

C:\Users\manuc>docker container ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                              NAMES
24b571cc0057        myApp   "/bin/sh -c 'MyApp…"   39 seconds ago      Up 38 seconds       0.0.0.0:9000->9000/tcp, 9042/tcp   silly_yalow

Solution

  • Things to do when your container is not behaving like you want:

    Docker network host only works in linux, not mac and windows. You can run container with docker run -p 9000:9000 myapp. Checkout documentation: https://docs.docker.com/network/host/#:~:text=The%20host%20networking%20driver%20only,the%20docker%20service%20create%20command.


    General form of the docker run command is docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] as you can see in documentation. You need to specify port options before image name.