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

Posted

技术标签:

【中文标题】无法访问 docker 容器内的烧瓶应用程序【英文标题】:Can't access flask app which is inside docker container 【发布时间】:2017-10-18 03:10:08 【问题描述】:

我无法在 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

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

【问题讨论】:

这里要添加两件事来提供帮助:1) 但是您正在发送 POST 请求和它的输出(因此我们可以确切地看到错误是什么),2) 可能有一点记录容器的输出(您永远不知道,也许某处存在 Flask 错误配置)您也可以添加一个简单的 GET 路由并调用它,以确保参数处理/POST 路由中的任何内容都没有发生任何有趣的事情。 1) 运行容器中没有任何可疑日志 2) 使用 GET 它也不起作用 Deploying a minimal flask app in docker - server connection issues的可能重复 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于无法访问 docker 容器内的烧瓶应用程序的主要内容,如果未能解决你的问题,请参考以下文章

无法从另一个 docker 容器中的烧瓶应用程序对驻留在 docker 容器中的 django 应用程序进行“获取”调用 [重复]

无法通过主机访问Docker flask服务器容器

无法从远程访问 docker 端口

使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint

没有 --net=host 参数的 docker 容器内的网络无法访问

主机无法访问 Wildfly 容器