从 Docker 图像的 django 收集静态部分制作静态文件
Make static files from django's collecstatic part of Docker image
我想在 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,但我应该使用 运行 命令来完成此任务,正如文档所说
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
我想在 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,但我应该使用 运行 命令来完成此任务,正如文档所说
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