Dockerized Flask:ピアによって接続がリセットされました


9

次の最小限の例を使用して、Docker化されたFlaskアプリに接続しようとすると、エラー104「ピアによる接続のリセット」で失敗します。

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

Flaskアプリは期待どおりに実行されているようです:

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

外部から接続しようとすると失敗します:

$ 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/

「Hello World!」が表示されない理由 ここに?

回答:


12

外部から接続しようとすると失敗する

実際に外部から接続していますか?Flaskはlocalhost(127.0.0.1)にバインドしており、コンテナー内からのみ到達可能です。ローカルマシンを使用している場合は、フラスコをすべてのIPにバインドする必要があります。

from flask import Flask
app = Flask(__name__)

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

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

それは私にとってうまくいきました。


1
そのとおり。私がドキュメントからコピーしただけなので、これは実際にはpythonまたはフラスコの問題だとは思っていませんでした。Thx
mcnesium

またはgunicornを使用:gunicorn --bind 0.0.0.0:5000 app:app
Martin Thoma

1
を使用している場合はflask run、を使用します--host=0.0.0.0。またはDockerfile内:CMD ["flask", "run", "--host=0.0.0.0"]
sebas

私はこれを4日間探していました> D lol
eleijonmarck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.