问题描述
我想在Docker映像中包含从python manage.py collectstatic
生成的静态文件。
为此,我在Dockerfile
CMD python manage.py collectstatic --no-input
但是因为它在中间容器中运行命令,所以生成的静态文件不在STATIC_ROOT
目录中。我可以在构建日志中看到以下几行。
Step 13/14 : CMD python manage.py collectstatic --no-input
---> Running in 8ea5efada461
Removing intermediate container 8ea5efada461
---> 67aef71cc7b6
我想在图像中包含生成的静态文件。我应该怎么做才能做到这一点?
更新(解决方案)
我正在使用CMD,但我应该按照文档中的说明使用RUN命令执行此任务
The RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile.
解决方法
您需要将collectstatic
的输出复制到最终容器中。
例如,我的dockerfile包含相同的概念(这不是完整的dockerfile,只是相关的部分)
# Pull base image
FROM python:3.7.7-slim-buster AS python-base
COPY requirements.txt /requirements.txt
WORKDIR /project
RUN apt-get update && \
apt-get -y upgrade && \
pip install --upgrade pip && \
pip install -r /requirements.txt
FROM node:8 AS frontend-deps-npm
WORKDIR /
COPY ./package.json /package.json
RUN npm install
COPY . /app
WORKDIR /app
RUN /node_modules/gulp/bin/gulp.js
FROM python-base AS frontend-deps
COPY --from=frontend-deps-npm /app /app
WORKDIR /app
RUN python manage.py collectstatic -v 2 --noinput
FROM python-base AS app
COPY . /app
COPY --from=frontend-deps /app/static-collection /app/static-collection