这可能是第100万张django + nginx帖子,但由于我在这里超过5小时没有找到答案,所以它会:
我的问题是并非所有静态文件都可以提供,只有一些。整个事情在我运行的Docker里运行
RUN python manage.py collectstatic --noinput;
RUN python manage.py makemigrations;
RUN python manage.py migrate;
在每次启动时,但它不会提供我的新.js和.css文件,尽管它们与旧文件位于相同的目录中。
我也看到了消息:
132 static files copied to '/static'.
以上是那里复制的文件列表,包括新文件。
项目结构:
/djangoapp
/app
/static
/css
/js
/django
/Dockerfile
/docker-compose
settings.py:
DEBUG = False
STATIC_URL = '/static/'
STATIC_ROOT = '/static'
nginx.conf:
upstream web {
ip_hash;
server web:8000;
}
server {
location /static {
autoindex on;
alias /static;
}
location / {
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}
为什么不提供所有静态文件?
编辑:
Dockerfile:
FROM python:3.6.4-onbuild
RUN mkdir /config;
RUN mkdir /src;
COPY . /src
WORKDIR /src
RUN python manage.py collectstatic --noinput;
RUN python manage.py makemigrations;
RUN python manage.py migrate;
RUN chmod 775 -R /static
#this shows that the new files reside with the others in the same directory
RUN ls -R /static/
CMD gunicorn WebInterface.wsgi -b 0.0.0.0:8000 --timeout 3600
搬运工-compose.yml:
version : '3'
services:
web:
build: ./WebInterface
container_name: WebDocker
volumes:
- static-content:/static
expose:
- "80"
nginx:
image: nginx:1.12.2
container_name: NGINXDocker
ports:
- "8000:8000"
volumes:
- ./WebInterface:/src
- ./config/nginx:/etc/nginx/conf.d/
- static-content:/static
depends_on:
- web
volumes:
static-content:
答案 0 :(得分:1)
好的,有了额外的信息,我想我知道发生了什么。 你运行你的python脚本来生成静态文件(我假设它)。在运行时,您将挂载目录,因此它将覆盖静态目录中的所有内容。 要么不挂载它,要么添加脚本
python manage.py collectstatic --noinput;
python manage.py makemigrations;
python manage.py migrate;
在入口点(https://docs.docker.com/engine/reference/builder/#entrypoint)
此外,将静态安装到nginx容器中没有任何作用,因为您只是反向代理到django容器而没有提供根路径。或者,如果它确实有些重合,我不确定它是否会在启动时获得新生成的文件。
希望这会有所帮助,当我开始使用docker时,有很多乐趣......
答案 1 :(得分:0)
现在的解决方法是在本地计算机上创建静态文件夹,然后将文件传输到docker-compose中的所需位置。
当我找到一个真正的解决方案时,为什么收集静态在docker中不起作用我将更新此
编辑:LevinM提供的解决方案
更新了Dockerfile(由于' onbuild'参数,这只提供了来自requirements.txt的图像和安装python库):
FROM python:3.6.4-onbuild
更新了docker-compose.yml:
version : '3'
services:
web:
build: ./WebInterface
entrypoint: bash -c "python manage.py collectstatic --noinput && python manage.py makemigrations && python manage.py migrate && gunicorn WebInterface.wsgi -b 0.0.0.0:8000 --timeout 3600";
container_name: WebDocker
volumes:
- ./WebInterface:/src
- static-content:/static
expose:
- "80"
nginx:
image: nginx:1.12.2
container_name: NGINXDocker
ports:
- "8000:8000"
volumes:
- ./WebInterface:/src
- ./config/nginx:/etc/nginx/conf.d/
- static-content:/static
depends_on:
- web
volumes:
static-content: