Исправление Gunicorn: «не найден модуль с именем index.py в import_app» ошибка - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю в Windows в контейнере Linux Docker.Я пытаюсь запустить приложение Flask через Gunicorn в контейнере Docker (используя docker-compose).Веб-приложение продолжает выходить со статусом 8 из функции import_app.

Я попытался запустить командную строку в качестве администратора, я попытался изменить команду запуска в файле docker-compose, и ятакже попытался запустить остальную часть моего проекта без него.Ничего из этого не помогло.

ОБНОВЛЕНИЕ: я попытался изменить порт, изменить имя файла (index.py), переустановить образ Docker для Python, удалить мои старые контейнеры Docker, добавить путь к Pythonв docker-compose и

docker-compose.yml:

version: '3'
services:
    web:
        build: .
        command: gunicorn "index:app" -b 0.0.0.0:8080
        ports:
            - "8888:8080"
        volumes:
            - .:/code
        depends_on:
            - redis
    redis:
        image: redis

А затем трассировка консоли:

web_1    | [2018-12-19 20:36:50 +0000] [8] [ERROR] Exception in worker process
web_1    | Traceback (most recent call last):
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
web_1    |     worker.init_process()
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
web_1    |     self.load_wsgi()
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
web_1    |     self.wsgi = self.app.wsgi()
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
web_1    |     self.callable = self.load()
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
web_1    |     return self.load_wsgiapp()
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
web_1    |     return util.import_app(self.app_uri)
web_1    |   File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
web_1    |     __import__(module)
web_1    | ModuleNotFoundError: No module named 'index'
web_1    | [2018-12-19 20:36:50 +0000] [8] [INFO] Worker exiting (pid: 8)
web_1    | [2018-12-19 20:36:50 +0000] [1] [INFO] Shutting down: Master
web_1    | [2018-12-19 20:36:50 +0000] [1] [INFO] Reason: Worker failed to         boot.
flaskpython_web_1 exited with code 3

Dockerfile:

FROM python:3

# set environment variables
ENV PYTHONUNBUFFERED 1
ENV FLASK_APP=index.py

# copy current directory into working directory
COPY . /code
WORKDIR /code

# install python packages
RUN pip install -r requirements.txt

expose 8080

CMD ["gunicorn", "index:app", "-b", "0.0.0.0:8080"]

Наконец, структура проекта:

|docker-compose.yml
|Dockerfile
|index.py
|requirements.txt

Ожидаемый результат заключается в том, что веб-сервер не аварийно завершает работу или завершает работу при выходе всех рабочих.Я хочу, чтобы он распознал, что индекс - это моя точка входа в остальную часть проекта.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Это, похоже, характерно для докера для Windows.Ищите здесь , чтобы обсудить это.Короче говоря, докер-машина монтирует C:\users\[USERNAME] по умолчанию, поэтому монтирование местоположения, которое находится где-то еще, не будет работать - это приведет к тому, что монтирование привязки будет пустым.

Что касается решения, у вас естьнесколько опций:

  • Удалить опцию громкости из файла docker-compose.Это должно быть нормально, так как вы уже добавляете все необходимое к изображению в Dockerfile.

  • Поместите свой проект где-нибудь в домашнюю директорию, C:\users\[USERNAME], и запустите все изтам.

  • Перейдите в настройки докера и установите общие диски на те, которые вам нужны, вероятно, C .Подробнее здесь .

0 голосов
/ 20 декабря 2018

Gunicorn будет искать index.py на PYTHONPATH внутри контейнера.Попробуйте установить PYTHONPATH в качестве переменной окружения в вашем docker-compose.yml:

version: '3'
services:
    web:
        build: .
        command: gunicorn "index:app" -b 0.0.0.0:8080
        environment:
            PYTHONPATH: '/code'
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...