如何“dockerize”Flask应用程序?
我有Flask应用程序命名为rest.py,我有dockerize,但它没有运行。
#!flask/bin/python from flask import Flask, jsonify app = Flask(__name__) tasks = [ { 'id': 1, 'title': u'Buy groceries', 'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 'done': False } ] @app.route('/tasks', methods=['GET']) def get_tasks(): return jsonify({'tasks': tasks}) if __name__ == '__main__': app.run(debug=True)
Dockerfile如下
FROM ubuntu RUN apt-get update -y RUN apt-get install -y python-dev python-pip COPY . /rest WORKDIR /rest RUN pip install -r Req.txt ENTRYPOINT ["python"] CMD ["rest.py"]
我已经build立它使用这个命令…
$ docker build -t flask-sample-one:latest
…当我运行容器…
$ docker run -d -p 5000:5000 flask-sample-one
返回下面的输出:7d1ccd4a4471284127a5f4579427dd106df499e15b868f39fa0ebce84c494a42我做错了什么?
-
你得到的输出是容器ID。 检查
docker ps
是否继续运行。 -
使用
docker logs [container-id]
来弄清楚里面发生了什么。 -
我可以在你的问题中find一些问题:
-
将
app.run
行更改为app.run(host='0.0.0.0', debug=True)
。 从集装箱的angular度来看,其服务需要外部提供。 所以他们需要在loopback接口上运行,就像你直接在主机上build立一个公共的服务器一样。 -
确保Flask被安装。 你的docker镜像文件需要所有的命令才能使它从一个空白的Ubuntu安装工作。
-
如果您在主机上公开此服务, 请不要忘记停用debugging。 Flask中的debugging模式可以让访问者在触发exception的情况下运行任意代码(这是一个function,而不是一个错误)。
-
之后(再次构build容器[1]),请在主机上尝试curl http://127.0.0.1:5000/tasks
。 让我知道如果它的工作,如果没有在您的设置中的其他问题。
[1]如果您在Docker容器中使用包含python文件的目录的卷装入,可以使用Flask的内置重装器(默认启用)来改进原型工作stream程 – 这将允许您更改脚本主机,在浏览器中重新加载,直接看到结果。
我相信你需要强化你关于Docker的概念,以了解它是如何工作的,然后你将实现你的任何应用程序“dockerizing”的目标。
这里有一篇文章 ,可以给你一些第一步。
官方的HOWTO也会帮助你。
一些观察可能会帮助你:
- 检查您的Req.txt是否包含安装
flask
- 在
dockerizing
之前,检查你的应用程序是否工作 - 用
docker ps
检查你的运行容器,看看你的容器是否在运行 - 如果正在运行,请testing您的应用程序:
curl http://127.0.0.1:5000/tasks
*
还有一件事:
- 你的JSON只有一个ELEMENT就有一个ARRAY 对象
这就是你想要的原型吗?
看看这个文档 ,关于JSON标准。