Search code examples
dockernetwork-programmingweb-applications

How to properly expose/publish ports for a WebUI-based application in Docker?


I'm trying to port this webapp to Docker. I wrote the following Dockerfile:

FROM anapsix/alpine-java
MAINTAINER <name>
COPY aard2-web-0.7-java6.jar /home/aard2-web-0.7-java6.jar
COPY start.sh /home/start.sh
CMD ["bash", "/home/start.sh"]
EXPOSE 8013/tcp

Here are the contents of start.sh:

#!/bin/bash
java -Dslobber.browse=true -jar /home/aard2-web-0.7-java6.jar /home/dicts/*.slob

Then I built the image:

docker build -t aard2-docker .

And I used the following command to run the container:

docker run --name Aard2 -p 127.0.0.1:8013:8013 -v /home/<name>/dicts:/home/dicts aard2-docker

The app is running normally, prompting that it's listening at http://127.0.0.1:8013. However, I opened the address only to find that I couldn't connect to the app. I tried using the EXPOSE command (as shown in the Dockerfile snippet above) and variants of the -p flag, such as -p 127.0.0.1:8013:8013, -p 8013:8013, -p 8013:8013/tcp, but none of them worked.

How can I expose/publish the port to 127.0.0.1 properly? Thanks!


Solution

  • Here's the response from the original author:

    you need to tell the server to listen on all network interfaces instead of localhost - that is you are missing -Dslobber.host=0.0.0.0

    this works for me:

    FROM anapsix/alpine-java
    COPY ./build/libs/aard2-web-0.7.jar /home/aard2-web-0.7.jar
    CMD ["bash", "-c", "java -Dslobber.host=0.0.0.0 -jar /home/aard2-web-0.7.jar /dicts/*.slob"]
    EXPOSE 8013/tcp
    

    and then run like this:

    docker run -v $HOME/Downloads:/dicts -p 8013:8013 --rm aard2-web

    -Dslobber.browse=true opens default browser, I don't think this has any effect in docker so don't need that.

    https://github.com/itkach/aard2-web/issues/12#issuecomment-895557949