尝试连接到Docker化的Flask应用失败,并显示错误104,“使用对等方重置连接”使用以下最小示例:


from flask import Flask
app = Flask(__name__)

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

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

< br 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!”在这里?

#1 楼


尝试从外部连接失败


您实际上是从外部连接吗? Flask绑定到本地主机(127.0.0.1),并且只能从容器内部访问。如果您在本地计算机上,则需要flask绑定到所有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')


对我来说成功地工作。

评论


那就对了。没想到这实际上是python或flask的问题,因为我只是从文档中复制了它。谢谢

–镁
18年2月20日在18:00

或与gunicorn:gunicorn --bind 0.0.0.0:5000 app:app

–马丁·托马
19年4月15日在7:18

如果使用烧瓶运行,请使用--host = 0.0.0.0。或在Dockerfile中:CMD [“ flask”,“ run”,“-host = 0.0.0.0”]

–sebas
19年9月7日在10:46

我一直在寻找4天> D哈哈

– eleijonmarck
19年11月19日在12:50

+1您保存了我的一天:)很高兴在20分钟而不是4天后找到此答案

– Lanenok
20年9月2日在18:55