Dockerized Flask: Verbindung durch Peer zurückgesetzt

9

Der Versuch, eine Verbindung zu einer Docker-Flask-App herzustellen, schlägt mit dem Fehler 104 "Verbindung durch Peer zurückgesetzt" anhand dieses minimalen Beispiels fehl:

app.py:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Dockerfile:

FROM python:alpine
RUN pip install flask
COPY . /src/
EXPOSE 5000
ENTRYPOINT ["python", "/src/app.py"]

docker-compose.yml:


test:
    build: .
    ports:
        - 127.0.0.1:5000:5000

Die Flaschen-App scheint wie erwartet zu laufen:

$ docker logs test 
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Der Versuch, eine Verbindung von außen herzustellen, schlägt fehl:

$ http http://127.0.0.1:5000/
http: error: ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) while doing GET request to URL: http://127.0.0.1:5000/

Irgendwelche Ideen, warum ich "Hallo Welt!" Nicht sehen kann. Hier?

mcnesium
quelle

Antworten:

12

Der Versuch, eine Verbindung von außen herzustellen, schlägt fehl

Verbinden Sie sich tatsächlich von außen ? Der Kolben ist an localhost (127.0.0.1) gebunden und nur innerhalb des Containers erreichbar. Wenn Sie sich auf Ihrem lokalen Computer befinden, benötigen Sie eine Flasche, um an alle IPs zu binden:

from flask import Flask
app = Flask(__name__)

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

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

Das funktioniert bei mir erfolgreich.

BoomShadow
quelle
1
Das stimmt. Ich hätte nie gedacht, dass dies tatsächlich ein Python- oder Flask-Problem ist, da ich es gerade aus den Dokumenten kopiert habe . Thx
mcnesium
Oder mit Gunicorn:gunicorn --bind 0.0.0.0:5000 app:app
Martin Thoma
1
Wenn Sie verwenden flask run, verwenden Sie --host=0.0.0.0. Oder in der Docker-Datei:CMD ["flask", "run", "--host=0.0.0.0"]
sebas
Ich habe 4 Tage lang danach gesucht> D lol
eleijonmarck