问题是我已经设置了dockerfiles,docker-compose正在运行一切,因为它应该是。数据库是连接和所有的工作人员。但唯一的问题是,我不能加载静态文件。Gunicorn通知,该文件"找不到"管理,和rest_framework静态文件。即使它创建'静态'在根目录,但不收集静态那里,而dockerfile运行。
当我做"docker-compose up"时,它说"0个静态文件被复制到"/static",165个未修改
到目前为止,我已经检查了在STATIC_ROOT和STATIC URL中配置的路径。另外,修改了我的docker-compose文件:
version: '3.11'
services:
django_gunicorn:
volumes:
- static:/static/
env_file:
- .env
build:
context: .
ports:
- "8000:8000"
nginx:
build: ./nginx
volumes:
- ./backend/service/static:/backend/static
ports:
- "80:80"
depends_on:
- django_gunicorn
- db
db:
image: postgres
expose:
- 5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
volumes:
static:
此外,我已经检查了nginx配置文件一次:
upstream django {
server django_gunicorn:8000;
}
server {
listen 80;
location / {
proxy_pass http://django;
}
location /static/ {
autoindex on;
alias /static/;
}
}
我也尝试过不同的方法来设置staticfiles的根目录和url,但现在还是这样:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
也有人建议先运行"collectstatic",我已经这样做了,但没有效果,所以我现在删除了静态文件夹,因为我没有看到其他应用程序中的"静态"文件夹以及。
进入点/sh
#!/bin/sh
python manage.py migrate --no-input
python manage.py collectstatic --no-input
gunicorn config.wsgi:application --bind 0.0.0.0:8000
下面是我的Dockerfile:
FROM python:3.11
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt \
python manage.py collectstatic \
pip install python-dotenv
COPY ./backend /app
WORKDIR /app
COPY ./entrypoint.sh /
ENTRYPOINT ["sh", "/entrypoint.sh"]
1条答案
按热度按时间2jcobegt1#
Nginx必须将STATIC_URLMap到STATIC_ROOT,这与docker-compose中的卷Map有关。
Nginx的停靠合成卷Map:
- static:/static/
虚拟卷“静态”到根目录
/static/
Nginx位置
将STATIC_URL =
/static/
Map到nginx容器/static/
内的目录,该目录与我们刚才提到的docker-compose卷Map相匹配。位置应该与STATIC_URL
匹配,因为Django生成这些URL,并且它确实使用STATIC_URL,因此静态文件的URL将以STATIC_URL开始,并且为了捕获这些URL,nginx必须使用相同的位置。但别名值不应该与STATIC_ROOT,因为我们通过docker-compose中的虚拟卷Map将静态文件“交付”到nginx,并且它们(静态文件)会出现在我们告诉它们的地方-- static:/static/
- nginx container 会在/static/
路径下看到它们。Django设置不会影响这个路径。Django项目Docker图像
COPY ./backend /app
这意味着
BASE_DIR
* 在容器内 * 将是/app
,这正是collectstatic
向您报告的内容:x1米11米1x现在我们需要通过虚拟卷将这些文件与nginx共享,方法是将虚拟卷Map到django项目容器内的目录,其中包含收集的静态文件。静态文件被收集到
/app/static
。与nginx共享的虚拟卷是static
,因此docker-compose用于Django项目的卷Map
- static:/app/static/