无法访问位于Docker容器中的Flask应用程序

19

我无法请求我的Docker容器内的Flask应用程序。它没有响应。

这是我的Flask应用程序文件:

import json
from flask import Flask, jsonify
from flask import request

from trained_model import predict
app = Flask(__name__)

@app.route("/", methods=['POST'])
def main():
    res = []

    for obj in request.json:
        item = str(obj['item'])
        print item
        predicted = predict(item)
        print predicted
    res.append({'item': item, 'correct': predicted})

    return json.dumps({'results': res})

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

这是我的Dockerfile:

FROM tensorflow/tensorflow

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Bundle app source
COPY . /usr/src/app

RUN sh docker_install.sh

EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["api.py"]

这是我的Docker运行命令:

sudo docker run -p 5000:5000 -d my-image

当我尝试发送POST请求时,它不起作用。


这里有两件事情需要补充:1)请提供你发送POST请求和输出的信息(这样我们才能看到确切的错误是什么),2)也许可以提供一些容器的日志输出(谁知道呢,也许出现了Flask的配置问题)另外,你还可以添加一个简单的GET路由并调用它,以确保在POST路由中没有任何奇怪的参数处理或其他问题。 - otupman
  1. 运行中的容器中没有任何可疑的日志记录
  2. 使用GET也无法正常工作
- Dmytro Nalyvaiko
3个回答

21

6

flask run --host=0.0.0.0 命令可以让你从外部访问 flask 服务器。当我在 docker 容器中运行 flask 应用时,也遇到了类似的问题。虽然我修改了 flask 应用并添加了 app.run(host:'0.0.0.0'),服务器已经在运行,但我无法通过浏览器访问它。后来我通过提供相同的端口号 o.o.o.o,从外部运行了 flask 服务器。


5

我遇到了同样的问题。 我将app.run()改为app.run(debug=True,host='0.0.0.0'),问题得以解决。 不确定app.run()存在什么问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接