Unable to connect with container at address /0.0.0.0:9000

5.5k Views Asked by At

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
1

There are 1 best solutions below

2
Doruk Eren Aktaş On BEST ANSWER

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

  • Check if your application is running in your computer.

  • After you run your container, check if it is healthy with docker ps. If it is not healthy, the problem is usually in your application.

  • Ensure it is running without errors, check logs with docker logs <container-id>. If logs are ok, problem is usually in the container network configuration.

  • Ensure you can access your application with docker exec -it <container-id> bash. And try to access port with curl or wget. If it is not reachable problem can be in iptables, firewall, or your application.

  • If you can ensure all the steps above working as expected. The problem is in docker network configuration.

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.