flask-restplus微服务在docker容器上无法访问

时间:2017-09-17 18:36:43

标签: python docker flask flask-restplus

这是一个带有 echo 端点的简单flask-restplus微服务,可以找到here 默认情况下在端口5000上本地运行:

cd $src_folder
python app.py

enter image description here

但在带有简单Dockerfile的docker容器中运行时......

RUN pip install --no-cache-dir -r requirements.txt
CMD [ "python", "./app.py" ]

...使用正确的端口映射/公开,由于某种原因无法访问:

    docker run -d -h $HOST --name $CONTAINER \ 
--publish $SERVER_PORT:$CONTAINER_PORT $DOCKER_HUB_IMG:$IMAGE_VERSION

...即使容器日志告诉它已正确启动:

(venv) .../flaskexample$ docker logs flaskexample 
2017-09-17 18:23:12,505 - werkzeug - INFO -  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
2017-09-17 18:23:12,506 - werkzeug - INFO -  * Restarting with stat
2017-09-17 18:23:13,016 - werkzeug - WARNING -  * Debugger is active!
2017-09-17 18:23:13,021 - werkzeug - INFO -  * Debugger PIN: 246-320-471
(venv) .../flaskexample$ 

...并且在 docker ps 中看起来还不错:

(venv) .../flaskexample$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
9d90da7ae192        kakicode/flaskexample:latest   "python ./app.py"        4 minutes ago       Up 4 minutes        0.0.0.0:5000->5000/tcp                                                   flaskexample

..但由于某种原因,我一直在接受:

enter image description here

...而且我的想法已经用完......不得不说我没有在flask-restplus配置中提供SERVER_NAME,因为它没有任何区别,仍然会遇到同样的问题,而且每个需要端口映射/暴露的其他容器在我的docker守护进程中工作正常。 我在Ubuntu 14.04.5中运行这些实验。

......有没有人经历过与flask-restplus类似的事情?

提前感谢你们

1 个答案:

答案 0 :(得分:4)

您的问题是您在app.py中使用了类似下面的内容

app.run(debug=True, port=5000)

或只是

app.run()

这样做默认是在127.0.0.1上监听。但是要使端口映射工作,它必须监听容器内的所有接口。所以你应该使用

app.run(debug=True, port=5000, host="0.0.0.0")

有待进一步参考,请参阅:

http://flask.pocoo.org/docs/0.12/api/?highlight=run#flask.Flask.run