python Docker编写Flask应用程序返回空响应

5jvtdoz2  于 2023-02-18  发布在  Python
关注(0)|答案(1)|浏览(242)

我正在尝试使用docker-compose来玩一个dockerized flask容器,这个flask应用程序是一个hello world应用程序,当我在我的主机上测试它的时候,它能正常工作。
Docker-compose文件如下所示:

version: '3'
services:
  web:
    image: ubuntu
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "6000:5000"

我的dockerfile看起来像这样:

FROM ubuntu

RUN apt-get update
RUN apt-get install -y python3 python3-pip

RUN pip3 install Flask

COPY app.py .

EXPOSE 5000

CMD ["python3", "app.py"]

hello world应用程序看起来像这样:

from flask import Flask, request

app = Flask(__name__)

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

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

当我使用docker-compose up -d调出容器时,没有任何错误。当我 curl 到localhost:6000时,我得到如下:

curl -X PUT localhost:6000
curl: (52) Empty reply from server

看起来应用程序有响应,但当我在我的主机上运行它时,它没有响应,当我转到它时,它只返回一个空字符串而不是“hello world”。我做错了什么?

fruv7luv

fruv7luv1#

这里有几个问题:
1.您需要使您的 flask 应用可从外部访问:app.run(host="0.0.0.0", debug=True).
1.您正在从curl发送PUT请求,但您的应用只允许GET(这是默认设置,您可以将允许的方法添加到路由中,如下所示:@app.route("/", methods=["GET", "PUT"]).
1.这一条实际上并不是一个bug,而是一个建议:如果你需要你的应用程序可以通过网络浏览器访问,不要使用端口6000。至少有一些端口会显示ERR_UNSAFE_PORT错误并阻止请求。不过它可以通过curl工作。

相关问题