Получил ошибку ModuleNotFoundError при запуске приложения из docker-compose. Как я могу решить эту проблему?

Я получил следующую ошибку при запуске из docker-compose, но она работает нормально, когда я запускаю docker run . Может кто-нибудь помочь мне отладить это. Ошибка:

File "/home/desktop/.local/bin/docker-compose", line 5, in <module>
    from compose.cli.main import main
  File "/usr/lib/python3.10/site-packages/compose/cli/main.py", line 19, in <module>
    from ..config import ConfigurationError
  File "/usr/lib/python3.10/site-packages/compose/config/__init__.py", line 3, in <module>
    from .config import ConfigurationError
  File "/usr/lib/python3.10/site-packages/compose/config/config.py", line 48, in <module>
    from .validation import match_named_volumes
  File "/usr/lib/python3.10/site-packages/compose/config/validation.py", line 8, in <module>
    from jsonschema import Draft4Validator
  File "/usr/lib/python3.10/site-packages/jsonschema/__init__.py", line 21, in <module>
    from jsonschema._types import TypeChecker
  File "/usr/lib/python3.10/site-packages/jsonschema/_types.py", line 3, in <module>
    from pyrsistent import pmap
ModuleNotFoundError: No module named 'pyrsistent'

Мой Dockerfile:

FROM python:3.9-alpine
ENV PYTHONUNBUFFERED=1
RUN apk update \
    && apk add --no-cache --virtual .build-deps
RUN pip install --upgrade pip
ENV APP_DIR /home/myapp
WORKDIR ${APP_DIR}
ADD requirements.txt ${APP_DIR}/
RUN pip install -r ${APP_DIR}/requirements.txt
COPY . .
EXPOSE 8000
ENTRYPOINT sh -c "python manage.py runserver 0.0.0.0:8000"

мой файл docker compose:

version: "3.9"
services:
  web:
    build: 
      context: .
    volumes:
      - .:/home/myapp
    ports:
      - "8000:8000"
    command: python manage.py runserver 0.0.0.0:8000
    container_name: django_myapp
    restart: always
    env_file: .env
<<<При запуске

я получаю вышеуказанную ошибку. Я попробовал добавить pyrsistent в файл requirements.txt, но ошибка остается той же. Как решить эту ошибку??docker-compose build

Это обычный стек ошибок Python, для его понимания необходимо иметь базовые знания Python, но я постараюсь кратко объяснить его здесь.

Ошибка начинается с /home/desktop/.local/bin/docker-compose, что означает, что она исходит от docker-compose на хост-машине, а не изнутри Docker. Стек вызовов указывает на путь вызова compose -> jsonschema -> pyrsistent и pyrsistent не найден (ModuleNotFoundError), что означает отсутствие зависимости на хост-машине.

Попробуйте pip3 install docker-compose --user и pip3 install pyrsistent --user:

  1. /home/desktop/.local/bin/docker-compose указывает, что ваш compose был установлен в ваш домашний каталог вместо системного пути, поэтому используйте --user для попытки локальной установки.
  2. Если все работает нормально, pip3 install docker-compose --user разрешит все дерево зависимостей и установит pyrsistent автоматически.
  3. Если не работает, попробуйте выполнить вторую команду, чтобы вручную исправить pyrsistent пакет.
  4. Если все еще не работает, попробуйте pip3 install --force-reinstall --user pyrsistent переустановить pyrsistent пакет.
Вернуться на верх