如何在Docker容器中运行Python Flask

10G*_*per 9 python flask docker

我正在尝试在docker容器中运行Python Flask Web服务器,但我无法从外部连接到Flask服务器.

我做了什么:

我建立 /temp/HelloFlask.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

我启动了docker容器,容器端口5000映射到主机端口5000,并且〜/ temp安装到/ temp

docker run -it -p 5000:5000 -v ~/temp:/temp --name tf gcr.io/tensorflow/tensorflow:latest-devel
Run Code Online (Sandbox Code Playgroud)

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

cd /temp
pip install Flask
python HelloFlask.py &
Run Code Online (Sandbox Code Playgroud)

我验证了服务器在容器中是可访问的

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

我正在使用Docker版本1.12.1(版本:12133),它暴露了localhost上的容器端口,因此我应该可以localhost:5000在我的Mac 上访问容器外部,但我无法连接.

我测试确保Docker通过运行ngetx容器正确地将容器端口绑定到localhost,如docker for mac quickstart中所述,我可以通过localhost从容器访问端口就好了.

Erd*_*ker 29

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

默认情况下,只能从localhost访问Flask服务器.在您的情况下,容器是localhost,您的请求来自容器外部.host='0.0.0.0'参数使服务器可从外部IP访问.它在Flask文档中有详细描述.

  • 非常感谢,花了两个晚上试图弄清楚这一点。似乎对于较新版本的Flask,您需要将其添加到python命令中:CMD [“ python3”,“-m”,“ flask”,“ run”,“-host = 0.0.0.0”] (6认同)
  • 我有同样的问题,但是`host ='0.0.0.0'`不起作用。即使我执行app.run(host ='0.0.0.0',port = 1234)并执行docker-compose up,它也会说:`在http://127.0.0.1:5000/上运行为什么它不在我指定的主机和端口上运行。 (2认同)