如何在Docker容器中运行Python Flask

我试图在Docker容器中运行一个Python Flask Web服务器,但是我无法从外部连接到Flask服务器。

我做了什么:

我创build了/temp/HelloFlask.py

 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

我启动了容器端口5000映射到主机端口5000,并将〜/ temp挂载到/ temp的docker容器

 docker run -it -p 5000:5000 -v ~/temp:/temp --name tf gcr.io/tensorflow/tensorflow:latest-devel 

在运行的HelloFlask.py容器中,我安装了Flask并运行了HelloFlask.py

 cd /temp pip install Flask python HelloFlask.py & 

我validation了服务器可以在容器内访问

 [root@de8b6996b540:/temp# curl localhost:5000 127.0.0.1 - - [22/Sep/2016 17:41:48] "GET / HTTP/1.1" 200 - Hello World! 

我使用Docker Version 1.12.1(build:12133),它暴露了localhost上的容器端口,所以我应该可以在我的Mac上访问localhost:5000 ,但是我无法连接。

我testing,以确保Docker正确绑定到本地主机的容器端口通过运行一个nginx容器,如docker for mac quickstart中所述 ,我可以通过本地主机从容器访问端口就好了。

试试app.run(host='0.0.0.0')

默认情况下,Flask服务器只能从本地主机访问。 在你的情况下,容器是本地主机,你的请求来自容器外部。 host='0.0.0.0'参数使服务器可以从外部IP访问。 这在Flask文档中有详细描述。