我正在尝试使用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”。我做错了什么?
1条答案
按热度按时间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工作。