无法访问Docker容器内的烧瓶应用程序

时间:2017-05-18 10:37:53

标签: python docker flask

我无法在docker容器内请求我的烧瓶应用程序。它没有回应。

我的烧瓶应用文件:

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 run命令:

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

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

3 个答案:

答案 0 :(得分:1)

我在flask run --host=0.0.0.0取得了成功。不知怎的,这似乎与app.run(host='0.0.0.0')不同,但我不知道为什么。见https://stackoverflow.com/a/43015007/9484954

答案 1 :(得分:0)

flask run --host=0.0.0.0在您要从外部访问Flask服务器时很有用。当我在Docker容器中运行flask应用程序时,我遇到了类似的问题。尽管我修改了flask应用程序并添加了app.run(host:'0.0.0.0'),但是服务器正在运行,但是无法在浏览器中访问它。然后,我通过提供相同的端口o.o.o.o在外部运行了flask服务器。

答案 2 :(得分:0)

我遇到了同样的问题。 我从 app.run(debug=True,host='0.0.0.0') 做了 app.run() 并且它奏效了。 不确定 app.run() 有什么问题