Запуск 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.
Удалите, так как вы уже скопировали все во время сборки.