我有名为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 我做错了什么?
答案 0 :(得分:0)
我相信你需要强化你对 Docker 的概念,以便了解它是如何工作的,然后你将实现你的目标" dockerizing"无论什么应用。
这是一个article,它可以为您提供一些初步步骤。
官方HOWTO也会帮助您。
可能对您有所帮助的一些观察结果:
flask
进行安装dockerizing
之前,检查您的应用程序是否正常运行docker ps
检查正在运行的容器,并查看您的容器是否正在运行curl http://127.0.0.1:5000/tasks
* 还有一件事:
这就是你想要的原型吗?
请参阅此doc,了解 JSON 标准。
答案 1 :(得分:0)
您获得的输出是容器ID。检查docker ps
是否继续运行。
使用docker logs [container-id]
来弄清楚里面发生了什么。
我可以在你的问题中找到一些问题:
将app.run
行更改为app.run(host='0.0.0.0', debug=True)
。从容器的角度来看,其服务需要外部可用。所以他们需要在loopback接口上运行,就像你在主机上直接设置公共服务器一样运行它。
确保已安装Flask。您的docker映像文件需要所有命令才能使其在空白的Ubuntu安装中运行。
如果您在主机上公开此服务,请不要忘记停用调试。 Flask中的调试模式使访问者可以运行任意代码,如果他们可以触发异常(这是一个功能,而不是一个错误)。
之后(再次构建容器[1]),在主机上尝试curl http://127.0.0.1:5000/tasks
。如果它有效,请告诉我,如果没有,您的设置中还有其他问题。
[1]如果在Docker容器中使用卷装入包含python文件的目录,可以使用Flask的内置重新加载器(默认情况下启用)来改进原型设计工作流程 - 这将允许您更改您在主机上的脚本,在浏览器中重新加载并直接查看结果。