При попытке запустить контейнер в Docker в сочетании с Poetry используется глобальный интерпретатор

У меня возникла проблема с установкой Docker, когда кажется, что виртуальное окружение используется неправильно, в результате чего модуль django не найден. Вот соответствующие детали:

Мой Dockerfile

FROM python:3.12
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY pyproject.toml poetry.lock* /app/
RUN curl -sSL https://install.python-poetry.org | python3 -
ENV PATH="/root/.local/bin:${PATH}"
COPY . /app/
RUN ls -la /app/
RUN poetry install --no-dev
RUN poetry config virtualenvs.create true \
    && poetry config virtualenvs.in-project true
RUN ls -l /app/.venv/bin/ && which python
RUN /app/.venv/bin/pip list
RUN /app/.venv/bin/python -m django --version
RUN poetry run python -m django --version
RUN poetry run python3 weather_app/manage.py migrate
RUN poetry run python3 weather_app/manage.py collectstatic --noinput
RUN ls -la /app/.venv/bin
ENTRYPOINT ["poetry", "run", "python", "weather_app/manage.py"]
CMD ["runserver", "0.0.0.0:8000"]

Мой docker-compose версия: '3.8'

services:
  weather:
    image: weather
    build: .
    command: /app/.venv/bin/python weather_app/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"

Мой pyproject.toml

[tool.poetry]
name = "weather-app"
version = "0.1.0"
description = ""
authors = ["Cur1yB <alexandr.ignatev1996@gmail.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.12"
django = "^5.0.7"
requests = "^2.32.3"
djangorestframework = "^3.15.2"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Когда я собираю и запускаю контейнер Docker, я получаю следующую ошибку:

Вот подробный вывод терминала, где видно (#14), что по какой-то причине при запуске используется глобальный интерпретатор Python.

Я натурально схожу с ума, потому что не могу решить эту проблему уже около 7-12 часов! ._.'

Похоже, что ваш Dockerfile создает виртуальную среду в /app/.venv. Затем в файле Compose есть монтирование volumes:, которое скрывает все в /app и заменяет его произвольным содержимым из хост-системы. Это включает в себя скрытие виртуальной среды.

В файле Compose удалите блок volumes:. Переопределение command: вам также не нужно (а с конкретной конструкцией ENTRYPOINT в Dockerfile оно вызовет проблемы). Вы должны быть в состоянии сократить файл Compose до следующего:

version: '3.8'
services:
  weather:
    build: .
    ports:
      - "8000:8000"
Вернуться на верх