[英]How to “dockerize” Flask application?
我有一个名为rest.py的Flask应用程序,并且我有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"]
我已经使用此命令来构建它...
$ docker build -t flask-sample-one:latest
...当我运行容器时...
$ docker run -d -p 5000:5000 flask-sample-one
返回以下输出:7d1ccd4a4471284127a5f4579427dd106df499e15b868f39fa0ebce84c494a42我在做什么错?
您得到的输出是容器ID。 与docker ps
检查是否保持运行。
使用docker logs [container-id]
找出内部发生了什么。
我可以在您的问题中发现一些问题:
将app.run
行更改为app.run(host='0.0.0.0', debug=True)
。 从容器的角度来看,其服务需要在外部可用。 因此,它们需要在回送接口上运行,就像如果直接在主机上设置公共可用服务器那样运行它。
确保已安装Flask。 您的docker映像文件需要所有命令才能从空白的Ubuntu安装中运行。
如果您曾在主机上公开此服务, 请不要忘记停用调试。 Flask中的调试模式使访问者可以触发任意代码(如果它们可以触发异常)(这是功能,而不是错误)。
之后(并再次构建容器[1]),尝试在主机上curl http://127.0.0.1:5000/tasks
。 让我知道它是否有效,如果没有,您的设置中还有其他问题。
[1]如果您在包含您的python文件的目录的Docker容器中使用卷装载,则可以使用Flask的内置重新加载器(默认情况下启用)来改善原型工作流程。主机,在浏览器中重新加载并直接查看结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.