【发布时间】:2021-12-17 06:28:24
【问题描述】:
我正在尝试 dockerize 我的 Flask API。一旦我尝试启动我的图像,我就会收到消息:
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
Usage: python -m flask run [OPTIONS]
Try 'python -m flask run --help' for help.
Error: While importing 'app', an ImportError was raised.
如果我使用终端 python -m flask run 启动 Flask 应用程序,一切都会按预期运行。
现在我被这个问题困住了。
这是我的代码:
from flask import Flask
from bson import json_util
from flask_pymongo import PyMongo
from flask_cors import CORS
import json
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://194.163.147.192:27017/test"
CORS(app)
mongo = PyMongo(app)
def parse_json(data):
return json.loads(json_util.dumps(data))
@app.route('/')
def home():
return 'Hello'
@app.route('/residential', methods=['GET'])
def find_residential(): # put application's code here
test = mongo.db.acs.find_one({"name": "Residential"})
response = Flask.jsonify(parse_json(test))
response.headers.add('Access-Control-Allow-Origin', '*')
return response
@app.route('/commercial', methods=['GET'])
def find_commercial(): # put application's code here
test = mongo.db.acs.find_one({"name": "Commercial"})
response = Flask.jsonify(parse_json(test))
response.headers.add('Access-Control-Allow-Origin', '*')
return response
@app.route('/healthcare', methods=['GET'])
def find_health_care(): # put application's code here
test = mongo.db.acs.find_one({"name": "Health Care"})
response = Flask.jsonify(parse_json(test))
response.headers.add('Access-Control-Allow-Origin', '*')
return response
@app.route('/germany', methods=['GET'])
def find_germany():
test = mongo.db.germanies.find_one()
response = Flask.jsonify(parse_json(test))
response.headers.add('Access-Control-Allow-Origin', '*')
return response
if __name__ == '__main__':
app.debug = False
app.run()
我的 requirements.txt 看起来像这样
bson==0.5.10
click==8.0.3
colorama==0.4.4
Flask==2.0.2
Flask-Cors==3.0.10
Flask-PyMongo==2.3.0
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
pymongo==3.12.1
python-dateutil==2.8.2
six==1.16.0
Werkzeug==2.0.2
我的 Dockerfile 看起来像这样
FROM python:3.8-slim-buster
WORKDIR /api
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
感谢您的帮助:)
项目结构如下:
API
L venv
L app.py
L Dockerfile
L requirements.txt
【问题讨论】:
-
你的项目目录的结构是什么?目前尚不清楚您的“编码”文件在哪里,它被称为什么或是否有其他任何可能干扰此过程的东西。如果没有更多细节,我无法真正忠实地重现这一点。
-
编辑:添加文件夹结构
-
你解决了吗?