从django的Docker映像的collecstatic部分制作静态文件

问题描述

我想在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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...