如何“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 

返回下面的输出:7d1ccd4a44712​​84127a5f4579427dd106df499e15b868f39fa0ebce8​​4c494a42我做错了什么?

  1. 你得到的输出是容器ID。 检查docker ps是否继续运行。

  2. 使用docker logs [container-id]来弄清楚里面发生了什么。

  3. 我可以在你的问题中find一些问题:

    1. app.run行更改为app.run(host='0.0.0.0', debug=True) 。 从集装箱的angular度来看,其服务需要外部提供。 所以他们需要在loopback接口上运行,就像你直接在主机上build立一个公共的服务器一样。

    2. 确保Flask被安装。 你的docker镜像文件需要所有的命令才能使它从一个空白的Ubuntu安装工作。

    3. 如果您在主机上公开此服务, 请不要忘记停用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标准。