我试图在docker容器中运行Python Flask网络服务器,但我无法从外部连接到Flask服务器。
我做了什么:
我创建了/temp/HelloFlask.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
我启动了docker容器,容器端口5000映射到主机端口5000,并且〜/ temp挂载到/ temp
docker run -it -p 5000:5000 -v ~/temp:/temp --name tf gcr.io/tensorflow/tensorflow:latest-devel
在正在运行的docker容器中,我安装了Flask并运行了HelloFlask.py
cd /temp
pip install Flask
python HelloFlask.py &
我验证了服务器可以在容器中访问
[root@de8b6996b540:/temp# curl localhost:5000
127.0.0.1 - - [22/Sep/2016 17:41:48] "GET / HTTP/1.1" 200 -
Hello World!
我使用的是Docker版本1.12.1(版本号:12133),它暴露了localhost上的容器端口,因此我应该可以在我的Mac上访问容器外的localhost:5000
,但是我无法连接。
我测试过确保Docker通过运行nginx容器正确地将容器端口绑定到localhost,如docker for mac quickstart中所述,我可以通过localhost从容器访问端口就好了。
答案 0 :(得分:21)
尝试app.run(host='0.0.0.0')
。
默认情况下,只能从localhost访问Flask服务器。在您的情况下,容器是localhost,您的请求来自容器外部。 host='0.0.0.0'
参数使服务器可以从外部IP访问。它在Flask documentation中有详细描述。