首页 > 解决方案 > 我在谷歌云运行中的 docker 图像不读取 css 文件

问题描述

我使用由 docker 组成的 Django 创建我的网站。

当我编译这个 docker 图像时,应用程序会显示一个带有 CSS 的网页,另一方面,当我在 google cloud run 上部署这个 docker 图像时,它只显示 HTML 文件,我的意思是它不包含 CSS 文件,所以它显示只是文字。

有谁知道为什么会这样?如果有人知道,请告诉我如何用样式展示我的网站。

标签: djangodockergoogle-cloud-rundjango-staticfiles

解决方案


collectstatic在生产中是必需的,但在开发中不是必需的。这个想法是在项目的根目录创建一个静态文件夹,nginx(或您正在使用的任何服务器)可以直接访问它。使用 时Docker,一种常见的方法是包含一个入口点。

为此,请将以下内容添加到您的Dockerfile:

ENV APP_HOME=/code # replace with your container's root dir
COPY ./entrypoint.sh $APP_HOME
ENTRYPOINT ["/code/entrypoint.sh"]

entrypoint.sh看起来像这样:

#!/bin/sh

set -e

# python entry point commands go here
python manage.py migrate
python manage.py collectstatic --no-input

exec "$@"

还要确保你有类似的东西

STATIC_URL = "/staticfiles/"
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")

在你的settings.py

其余的取决于您的服务器设置(nginx、apache 或您正在使用的任何东西),但可能看起来像

location /static/ {
    root /code/static/;
    autoindex off;
}

在 Nginx 中。

我发现一个非常有用的工具是whitenoise。只需按照设置指南进行操作,您就可以跳过 nginx 的内容。


推荐阅读