无法访问 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-compose时无法访问docker容器内的spring-boot rest-endpoint