Получил ошибку 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:
/home/desktop/.local/bin/docker-composeуказывает, что ваш compose был установлен в ваш домашний каталог вместо системного пути, поэтому используйте--userдля попытки локальной установки.- Если все работает нормально,
pip3 install docker-compose --userразрешит все дерево зависимостей и установитpyrsistentавтоматически. - Если не работает, попробуйте выполнить вторую команду, чтобы вручную исправить
pyrsistentпакет. - Если все еще не работает, попробуйте
pip3 install --force-reinstall --user pyrsistentпереустановитьpyrsistentпакет.