Docker 为 Flask 公开端口 API

Docker Exposing ports for Flask API

问题陈述

我运行在暴露在端口 5000 上的 Docker 容器中使用基于 Flask 的 API,但是甚至没有请求到达 API.

转载

  1. 获取jupyter/all-spark-notebookdocker图片
  2. 在 Docker 容器中,获取任何基于 Flask 的 API,出于可重复性的目的,请尝试 https://github.com/miguelgrinberg/oreilly-flask-apis-video(为了理解一个非常简单的基于 Python 的 API 在版本中切换到 v0.1)
  3. 运行 Docker 使用此处描述的标准命令 (https://github.com/jupyter/docker-stacks/tree/master/all-spark-notebook)。忘记笔记本部分,仅使用 -p 5000:5000 将 API 首选端口设置为 运行。不要使用 HTTPS,但要在容器上安装 ssh。 (所以除非你像我一样使用自定义 Docker 文件,否则你需要启用 SUDO)
  4. 尝试向 API 发出任何请求(例如 http GET http://localhost:5000/customers/1)--> 这失败了 并根据不同得到不同的错误消息
    • 是否Python based urlib request (IOError: ('http protocol error', 0, 'got a bad status line', None))
    • 或基于 HTTPie (http: error: ConnectionError: HTTPConnectionPool(host='localhost', port=5000): Max retries exceeded with url: /filterReplies/aaaaa/aaaa (Caused by <class 'http.client.RemoteDisconnected'>: Remote end closed connection without response))
  5. 查看日志,没有任何API请求的记录

备注

所有功劳都归功于 ipinak,他建议将应用程序绑定到 0.0.0.0,这确实解决了问题。

有趣的是,该应用程序仍然在本地主机上响应。但我暂时接受它。

绑定到 0.0.0.0 将在任何可用界面中绑定您的应用程序,localhost 不会。有一个post描述了localhost0.0.0.0的区别,如果我找到我会更新这个post。

这里似乎没有代码示例,所以我想我应该添加我所做的,以便 "bind" 到 0.0.0.0 来解决 HTTP request sent, awaiting response... No data received.问题。

app = flask.Flask(__name__)
app.config['DEBUG'] = True
app.run(host='0.0.0.0')

app.run(host='0.0.0.0') 是重要的一点。

这应该可以解决 HTTP request sent, awaiting response... No data received. 问题。