ModuleNotFoundError возникает только при запуске приложения в Docker

#python #django #linux #docker #docker-compose

Вопрос:

В настоящее время я экспериментирую с кухонными ножницами. Я создаю шаблон для Django, который работает. Следующий шаг-добавить для него контейнер docker. По какой-то причине я получаю следующую ошибку при запуске docker-compose up (или просто запускаю приложение django вручную из контейнера):

 app_1  | Exception in thread django-main-thread:
app_1  | Traceback (most recent call last):
app_1  |   File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
app_1  |     self.run()
app_1  |   File "/usr/local/lib/python3.8/threading.py", line 870, in run
app_1  |     self._target(*self._args, **self._kwargs)
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
app_1  |     fn(*args, **kwargs)
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 110, in inner_run
app_1  |     autoreload.raise_last_exception()
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
app_1  |     raise _exception[1]
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 357, in execute
app_1  |     autoreload.check_errors(django.setup)()
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
app_1  |     fn(*args, **kwargs)
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
app_1  |     apps.populate(settings.INSTALLED_APPS)
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
app_1  |     app_config = AppConfig.create(entry)
app_1  |   File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
app_1  |     module = import_module(entry)
app_1  |   File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
app_1  |     return _bootstrap._gcd_import(name[level:], package, level)
app_1  |   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
app_1  |   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
app_1  |   File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
app_1  | ModuleNotFoundError: No module named 'd'
 

Когда я запускаю приложение django вручную, все работает просто отлично.
Я также добавлю свой файл Dockerfile и свой файл docker-compose.yaml:

 FROM python:3.8-slim-buster

ENV PYTHONUNBUFFERED=1 
    APP_ROOT=/var/app

# Install waitfor
ENV WAITFOR_VERSION="v2.1.1"
RUN set -x 
    amp;amp; BUILD_PACKAGES=' 
        curl 
    ' 
    amp;amp; RUNTIME_PACKAGES=' 
        gosu 
        netcat 
    ' 
    amp;amp; apt-get update 
    amp;amp; apt-get install -y ${BUILD_PACKAGES} ${RUNTIME_PACKAGES} 
    amp;amp; curl -o /usr/local/bin/wait-for -sSL https://raw.githubusercontent.com/eficode/wait-for/${WAITFOR_VERSION}/wait-for 
    amp;amp; chmod  x /usr/local/bin/wait-for 
    amp;amp; apt-get purge -y --auto-remove ${BUILD_PACKAGES} 
    amp;amp; rm -rf /var/lib/apt/lists/*

COPY requirements.txt ${APP_ROOT}/requirements.txt

RUN set -ex 
    amp;amp; BUILD_PACKAGES='
        build-essential 
        git-core 
        liblzma-dev 
        graphviz-dev
    ' 
    amp;amp; RUNTIME_PACKAGES=' 
        postgresql-client 
        postgresql-contrib 
        graphviz 
        lzma 
    ' 
    amp;amp; apt-get update 
    amp;amp; apt-get install -y --no-install-recommends 
        ${BUILD_PACKAGES} ${RUNTIME_PACKAGES} 
    amp;amp; pip install --no-cache-dir -r ${APP_ROOT}/requirements.txt 
    amp;amp; apt-get remove -y ${BUILD_PACKAGES} 
    amp;amp; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false 
    amp;amp; rm -rf /var/lib/apt/lists/* 
    
    amp;amp; find /usr/local -depth 
        ( 
            ( -type f -a ( -name '*.pyc' -o -name '*.pyo' ) ) 
        ) -exec rm -rf '{}'  

# COPY docker-dev-entrypoint.sh /usr/local/bin/default-entrypoint.sh
# ENTRYPOINT ["/usr/local/bin/default-entrypoint.sh"]

COPY ./ ${APP_ROOT}

WORKDIR ${APP_ROOT}

 
 version: '3.9'
services:
  db:
    image: postgis/postgis:12-master
    container_name: "my_demo_app_db"
    ports:
      - "5432"
    environment:
      - POSTGRES_PASSWORD=dev
      - POSTGRES_DB=my_demo_app
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - db_data:/var/lib/postgresql/data
  app:
    build:
      dockerfile: Dockerfile
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./:/var/app
      - /tmp:/tmp
    command: python manage.py runserver 0.0.0.0:8000
    env_file:
      - docker.env
    depends_on:
      - db
volumes:
  db_data:

 

Кто-нибудь знает, откуда берется ошибка и/или как ее исправить?

Заранее спасибо!

Комментарии:

1. Можете ли вы предоставить свой файл конфигурации Django ?

2. Приношу извинения за поздние ответы, но я смог исправить ошибку. Я неправильно добавлял приложения в УСТАНОВЛЕННЫЕ приложения в настройках django ( делал = ‘имя приложения’ вместо = [‘имя приложения’] )

3. Непонятно, почему ошибка произошла только в контейнере, но сейчас она работает

4. Да, это то, о чем я догадался по следу стека. Рад, что вы исправили ошибку !