首页 > 解决方案 > Docker Flask,卡在“等待来自本地主机的响应”

问题描述

我试图在 Docker 中运行一个测试 Flask,但由于某种原因,我无法从主机连接到它,文件的组成是:

pyweb/
 |app.py
 |Dockerfile
 |___app/
     |__init__.py

文件内容: Dockerfile:

FROM python:2.7
COPY . /pyweb
WORKDIR /pyweb
RUN pip install flask
RUN export FLASK_APP=app.py
ENTRYPOINT ["python"]
CMD ["app.py"]

应用程序.py:

from flask import Flask
from app import app 

应用程序/初始化.py:

from flask import Flask

app = Flask(__name__)


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

app.run(host='0.0.0.0')

运行 docker 文件并使用 启动容器后docker run -d -p 5000:5000,响应为

* Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

但是我无法从主机连接,它没有响应

标签: dockerflaskdockerfile

解决方案


好吧,一年多前我在一次采访中遇到了同样的问题,直到今天我仍然感到困惑。

我不知道为什么在使用app.run().

直接使用烧瓶命令行启动应用程序时,它以某种方式工作正常。

Dockerfile 看起来像这样:

FROM python:2.7
COPY . /pyweb
WORKDIR /pyweb
RUN pip install flask
ENV FLASK_APP=app.py
CMD ["flask", "run", "--host", "0.0.0.0"]

你可以app.run(host='0.0.0.0')__init__.py文件中删除。

稍后我可能会花一些时间尝试了解为什么您的原始实现无法按预期工作。我对烧瓶了解不多,但我在您的代码中没有发现任何问题。


推荐阅读