'"Problem loading Page" Flask App using docker

I am trying to run a flask app using a docker. Operating system Windows 11, WSL image Ubuntu-20.04. A simple reproducible example: https://github.com/Konrad-H/stackoverflow-question

If I run (inside a venv)

$ python app/main.py

the following message appears in the console:

Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

And I can successfully connect to the app.

On the other hand, if I try to run the repo using:

$ docker build -t s-o-question:latest .
$ docker run -p 5000:5000 s-o-question

I get the exact same message on the console, but the webpage takes a long time loading and after a while a connection timeout appears.

The error appears both inside WSL2 and inside Windows.

Source Code:

main.py

import logging

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/")
def index():
    print("Hello World I am Sea")
    return "Hello big world"


if __name__ == "__main__":
    app.logger = logging.getLogger("audio-gui")
    app.run( host='0.0.0.0',port=5000, debug=True)

Dockerfile

FROM python:3.8

# Working Directory
WORKDIR /app

# Copy source code to working directory
COPY . ./app /app/

# Install packages from requirements.txt
# hadolint ignore=DL3013
RUN pip install --no-cache-dir --upgrade pip &&\
    pip install --no-cache-dir --trusted-host pypi.python.org -r requirements.txt

EXPOSE 5000

ENTRYPOINT [ "python" ]

CMD [ "app/main.py" ]


Solution 1:[1]

I had the same issue. The URL http/localhost:5000/ worked for me (5000 is my exposed port number). you can try and see if it works. Alternatively, you can also try http://<host-ip>:5000/. Note that the host-ip should be IP address of your local machine not the IP address of the docker container.

you can also check this answer

Solution 2:[2]

The issue is that you cannot use same port number for ex if your app runs on port 5000 it must be bind to another port like 8080 in docker . try this docker run -p 8080:5000 s-o-question I had the same issue on my win 11 device , i worked around this using the above solution.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jagadeesh Kumar M
Solution 2 shivam singh