Получил ошибку 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
пакет.