簡體   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