Запуск Django's collectstatic в Dockerfile приводит к созданию пустого каталога

Я пытаюсь запустить Django из контейнера Docker на Heroku, но чтобы это работало, мне нужно запустить python manage.py collectstatic на этапе сборки. Чтобы добиться этого, я написал следующий Dockerfile:

# Set up image
FROM python:3.10
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Install poetry and identify Python dependencies
RUN pip install poetry
COPY pyproject.toml /usr/src/app/

# Install Python dependencies
RUN set -x \
    && apt update -y \
    && apt install -y \
        libpq-dev \
        gcc \
    && poetry config virtualenvs.create false \
    && poetry install --no-ansi

# Copy source into image
COPY . /usr/src/app/

# Collect static files
RUN python -m manage collectstatic -v 3 --no-input

The Dockerfile builds just fine, and I can even see that collectstatic is running and collecting the appropriate files during the build. However, when the build is finished, the only evidence that collectstatic ran is an empty directory called staticfiles. If I run collectstatic again inside of my container, collectstatic works just fine, but since Heroku doesn't persist files created after the build stage, they disappear when my app restarts.

Я нашел несколько ответов на SO, в которых обсуждалось, как заставить collectstatic работать внутри Dockerfile, но это не моя проблема; моя проблема в том, что он работает, но собранные файлы не отображаются в контейнере. Кто-нибудь может подсказать, что происходит?

Вы переопределяете содержимое /usr/src/app в вашем контейнере, когда вы добавили

volumes:
        - .:/usr/src/app

В ваш файл docker compose.

Удалите, так как вы уже скопировали все во время сборки.

Вернуться на верх