Как запустить приложение фляги с оружейным оружием в докере (импорт локальных модулей) - PullRequest
0 голосов
/ 22 декабря 2018

Я унаследовал плохо структурированное приложение на Python (большая часть кода и маршрутов находится в одном файле, app.py. Я хотел бы модулировать приложение, но прежде всего я пытаюсь запустить его в контейнере Docker.чтобы понять, с чем я имею дело. Мне не удалось запустить его, и он не может импортировать некоторые локальные модули. Ниже приведена структура каталогов:

├── Dockerfile
├── README.md
├── app
│   ├── app.py
│   ├── config.py
│   ├── database.ini
│   ├── db.py
│   ├── db.sqlite3
│   ├── functions.py
│   ├── gunicorn_config.py
│   ├── static

Вот соответствующая выдержка изМой Dockerfile:

#copy flask app module
COPY app app
COPY requirements.txt ./

#install packages
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt`

#expose application port
EXPOSE 5000
WORKDIR /app
CMD ["gunicorn", "--config", "gunicorn_config.py", "app:app"]

Это ошибка, которую я получаю, когда запускаю контейнер:

[2018-12-22 05:51:58 +0000] [1] [INFO] Starting gunicorn 19.7.1
[2018-12-22 05:51:58 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2018-12-22 05:51:58 +0000] [1] [INFO] Using worker: sync
[2018-12-22 05:51:58 +0000] [9] [INFO] Booting worker with pid: 9
[2018-12-22 05:51:58 +0000] [10] [INFO] Booting worker with pid: 10
[2018-12-22 05:51:58 +0000] [11] [INFO] Booting worker with pid: 11
[2018-12-22 05:51:59 +0000] [12] [INFO] Booting worker with pid: 12
[2018-12-22 05:51:59 +0000] [13] [INFO] Booting worker with pid: 13
[2018-12-22 05:51:59 +0000] [10] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.5/dist-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/usr/local/lib/python3.5/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/local/lib/python3.5/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python3.5/dist-packages/gunicorn/util.py", line 352, in 
import_app
__import__(module)
File "/app/app.py", line 6, in <module>
import db
ImportError: No module named 'db'

Что мне нужно сделать, чтобы приложение запускалось в контейнере.Я запускаю локально с gunicorn --config gunicorn_config.py app:app, он запускается, но не в докере. Что я упустил из виду, что здесь не получается? Спасибо заранее, я действительно просмотрел большинство потоков здесь, но этот импорт - запутанная часть. Вот фрагмент из приложения.py также (первые 15 строк):

import flask,sys,uuidv
from flask import  request, send_from_directory, session, url_for, 
redirect, jsonify, make_response, flash, get_flashed_messages
import json
from werkzeug import secure_filename
from jinja2 import Environment, FileSystemLoader
import os, csv, xlrd
import db, functions
app = flask.Flask(__name__, static_url_path="") #template_folder='static', 
static_url_path=""
app.secret_key = str(uuid.uuid4())
locale = (os.path.abspath(__file__))
locale = locale.replace('app.py', '')
UPLOAD_FOLDER = os.path.join(locale, 'files/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...