python - Dockerize Flask:错误:导入“应用程序”时,引发了 ImportError
问题描述
我正在尝试对接我的 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.
如果我用我的终端启动 Flask 应用程序,python -m flask run
一切都会按预期工作。现在我被困在这个问题上。
这是我的代码:
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
解决方案
我认为您的问题在于您的需求文件。在那里,您将bson
其作为依赖项包含在内,该依赖项也包含在pymongo
库中。看到这个问题。删除它似乎可以解决问题:
~/tmp/so_q $ docker build -t myimage . 8s nathanielford@nford 20:51:04
Sending build context to Docker daemon 5.12kB
...
Successfully tagged myimage:latest
~/tmp/so_q $ docker run myimage 13s nathanielford@nford 20:51:26
* 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
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://192.168.9.2:5000/ (Press CTRL+C to quit)
推荐阅读
- c++ - 从源代码构建 pcl 1.7.2
- javascript - 如何让我的下一个函数在我的 javascript 视觉小说中工作?
- excel - 在 VBA/Excel 中,如何使用 ActiveX 选项按钮更改下拉菜单的链接单元格?
- amazon-web-services - 带有 Internet 网关和 lambda 的 NAT 网关
- javascript - 如果函数返回未定义,Symbol.toPrimitive 函数会多次调用
- soap - OSB 在生成的 wsdl 中设置外部 ip
- android - ConstraintLayout:如何将两个 TextView 垂直居中对齐
- php - 如何在 Codeigniter 中将一行放在顶部
- json - 在另一个视图控制器中可解码获取数据
- wordpress - 自定义插件突然在所有页面上给出 404 并且在 Wordpress 上不显示已发布的页面/帖子