0

I am working on a microservice written in python. My microservice works fine on my windows machine and I can easily test it. However, on my Linux container it may work fine too but I cannot test it. Even when optimizing my code for network access as explained here.

So here is my microservice:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(host='0.0.0.0')

- I tested this by running on windows by typing in the command prompt:

python.exe app.py

- I got a message ending with

Running on http://0.0.0.0:5000/ (Press CTRL C to quit).

To test my microservice, I executed my browser to access: http://localhost:5000/

I can see the "Hello World" message. So my application seems to work perfectly.

After that, I started working with docker. Here is my Dockerfile (named "Dockerfile").

FROM python
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
RUN pip install Flask
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3"]
CMD ["app.py"]

Here is my build command:

docker build -t docktoflask .

Which shows some output considering the build process.

Then I started running the container with this command:

docker run -p 5002:5002 docktoflask

I got the same ending message as I got on windows (which is remarkable because I specified port 5002).

After that I tried testing with this link: http://localhost:5002/

(of course I also tried http://localhost:5000/ )

No success.... (which means a browser error instead the hello world message). The error is in Dutch (my browser language) but means the same as this.

This is annoying because it seems to work and the port is really active. There are two applications, I should be able to access from my browser (portainer and my own application). I can access portainer without any problems. How can I access my microservice, when running it in a docker container?

my running containers

Daan
  • 2,478
  • 3
  • 36
  • 76

1 Answers1

1

The command

docker run -p 5002:5002 docktoflask

means that the internal container port 5002 will be exposed as host port 5002 (localhost:5002), even if the internal container port 5002 is not opened yet.

You have to change this to

docker run -p 5000:5000 docktoflask
LRA
  • 36
  • 3
  • Thanks. "docker run -p 5002:5000 docktoflask" also works because 5002 is opened on the windows environment I am working on. – Daan Jun 08 '18 at 13:13