Как развернуть приложение Django в докере с помощью UVPython

Программы на Python
Ответить
Anonymous
 Как развернуть приложение Django в докере с помощью UV

Сообщение Anonymous »

Я пишу конфигурацию Dockerfile для приложения Django. Я использую UV для управления своими зависимостями в виртуальной среде. Приложение нормально работает вне контейнера, но когда я пытаюсь запустить его из контейнера, оно не может найти пакет django:

Код: Выделить всё

from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
Это говорит мне о том, что воссоздание virtualenv внутри контейнера не работает должным образом. Но я не могу найти проблему. Вот мой файл Docker:

Код: Выделить всё

FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim

WORKDIR /app

# Enable bytecode compilation
ENV UV_COMPILE_BYTECODE=1

# Copy from the cache instead of linking since it's a mounted volume
ENV UV_LINK_MODE=copy

#ENV PYTHONDONTWRITEBYTECODE 1
#ENV PYTHONUNBUFFERED 1

RUN apt-get update && \
apt-get install -y --no-install-recommends gcc python3-dev libpq-dev gunicorn &&\
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# Install the project's dependencies using the lockfile and settings
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --frozen --no-install-project --no-dev

# Then, add the rest of the project source code and install it
# Installing separately from its dependencies allows optimal layer caching
ADD . /app
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-dev

#COPY --from=builder /usr/local/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/

# Place executables in the environment at the front of the path
ENV PATH="/app/.venv/bin:$PATH"
ENTRYPOINT []

RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
WORKDIR /app/myproject
EXPOSE 9090
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:9090"]
Я также использую следующий файл docker-compose для управления контейнером

Код: Выделить всё

services:
web:
# Build the image from the Dockerfile in the current directory
build: .
# Host the app on port 8000
ports:
- 9090:9090
networks:
- app_network
restart: unless-stopped

networks:
app_network:
driver: bridge
Я должен сказать, что этот Dockerfile основан на примере, предоставленном astral-sh.
Почему не работает установка зависимостей?< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-with-uv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»