繁体   English   中英

如何“码头化” Flask应用程序?

[英]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 

返回以下输出:7d1ccd4a44712​​84127a5f4579427dd106df499e15b868f39fa0ebce8​​4c494a42我在做什么错?

我相信您需要加强有关Docker的概念,以了解其工作原理,然后才能实现有关“对任何应用程序进行“ Docker化”的目标。

这是一篇可以给您一些初步步骤的文章

官方的HOWTO也将为您提供帮助。

一些可以帮助您的观察:

  • 检查您的Req.txt是否包含用于安装的flask
  • 在进行dockerizing之前,请检查您的应用程序是否正常运行
  • 使用docker ps检查您正在运行的容器,并查看您的容器是否正在运行
  • 如果正在运行,请测试您的应用程序: curl http://127.0.0.1:5000/tasks *

还有一件事:

  • 您的JSON有一个数组对象只有一个元素

这就是您想要的原型吗?

看一下有关JSON标准的文档

  1. 您得到的输出是容器ID。 docker ps检查是否保持运行。

  2. 使用docker logs [container-id]找出内部发生了什么。

  3. 我可以在您的问题中发现一些问题:

    1. app.run行更改为app.run(host='0.0.0.0', debug=True) 从容器的角度来看,其服务需要在外部可用。 因此,它们需要在回送接口上运行,就像如果直接在主机上设置公共可用服务器那样运行它。

    2. 确保已安装Flask。 您的docker映像文件需要所有命令才能从空白的Ubuntu安装中运行。

    3. 如果您曾在主机上公开此服务, 请不要忘记停用调试。 Flask中的调试模式使访问者可以触发任意代码(如果它们可以触发异常)(这是功能,而不是错误)。

之后(并再次构建容器[1]),尝试在主机上curl http://127.0.0.1:5000/tasks 让我知道它是否有效,如果没有,您的设置中还有其他问题。

[1]如果您在包含您的python文件的目录的Docker容器中使用卷装载,则可以使用Flask的内置重新加载器(默认情况下启用)来改善原型工作流程。主机,在浏览器中重新加载并直接查看结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM