Flask API的Docker暴露端口

问题描述 投票:2回答:3

问题陈述

我正在端口5000上公开的Docker容器中运行基于Flask的API,但是甚至没有请求到达该API。

要复制

  1. 获取jupyter /所有火花笔记本docker图像
  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。 (因此,除非您使用像我这样的自定义Dockerfile,否则您将需要启用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请求的记录

注意

  • 我在Linux机器上运行,因此不需要VM。
  • wget http://localhost:5000(获取Connecting to localhost (localhost)|127.0.0.1|:5000... connected. HTTP request sent, awaiting response... No data received. Retrying.)和wget http://localhost:1234(获取Resolving localhost (localhost)... 127.0.0.1 Connecting to localhost (localhost)|127.0.0.1|:8888... failed: Connection refused.)有所不同,因此端口在某种程度上是开放的,但是似乎没有什么在等待侧?
  • 图像的原始目的仍然有效-即如果我指定要转发的端口,我仍然可以在docker容器中基于浏览器访问Jupyter笔记本。因此some在此计算机上的端口转发有效。
问题声明我正在端口5000上公开的Docker容器中运行基于Flask的API,但是甚至没有请求到达该API。重现Get jupyter / all-spark -...
linux api flask docker ports
3个回答
2
投票

[全部归功于ipinak,他建议将应用程序绑定到0.0.0.0,这确实解决了问题。


1
投票

0
投票
app.run(host='0.0.0.0')是重要位。

这将解决HTTP request sent, awaiting response... No data received.问题。

© www.soinside.com 2019 - 2024. All rights reserved.