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