【发布时间】:2018-11-13 07:14:10
【问题描述】:
我在容器内有一个烧瓶应用程序。我用
运行这个容器docker run -p 5000:5000 pyprojects_web
它会回复
* Serving Flask app "debateit.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
如果我跑了
docker container ls
我明白了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2221298e6e2c pyprojects_web "flask run" 12 minutes ago Up 12 minutes 0.0.0.0:5000->5000/tcp elated_joliot
如果我访问http://127.0.0.1:5000,我会得到:
This site can’t be reached
The web page at http://127.0.0.1:5000/ might be temporarily down or it may have moved permanently to a new web address.
ERR_SOCKET_NOT_CONNECTED
http://localhost:5000 给出了类似的响应。
通常的建议是使用 0.0.0.0 监听容器内的所有连接 - 但我已经这样做了。这是我的应用程序:
from app import app
if __name__ == "__main__":
app.run(host="0.0.0.0")
如果我从容器内部卷曲,它会完美运行:
docker exec -it 2221298e6e2c curl http://localhost:5000
HTML 响应很长,我的服务器日志得到:
127.0.0.1 - - [04/Jun/2018 01:00:16] "GET / HTTP/1.1" 200 -
鉴于这些结果,并且我有一个“0.0.0.0”主机,还有什么可以尝试的?
谢谢。
【问题讨论】:
-
您使用的是哪个操作系统?顺便说一句,这不是烧瓶问题,您的烧瓶设置看起来不错。
-
下面的输出是什么:
docker run -it --rm --net container:2221298e6e2c nicolaka/netshoot netstat -lnt -
您可能需要尝试访问
192.168.99.100:5000或192.168.64.8:5000,具体取决于哪个操作系统。 -
@chrisz 这是在 Ubuntu 上,但我在使用 Docker for Windows 的 Windows 上遇到了类似的问题。我的代码不是我完整的 Flask 应用程序,而是表明我使用的是 0.0.0.0。如果需要,我可以链接我的 github 存储库。这些 IP 都不适合我。
-
@BMitch 要求您运行的命令的输出证实了这一点:)
标签: docker networking flask