[英]django static files are not copied to saticfiles folder on docker's container
我试图了解在尝试将我的static / media文件夹复制到docker上的staticfiles / medialfiles时我做错了什么。
这就是我所拥有的:
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles")
Docker文件
FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV C_FORCE_ROOT true
RUN mkdir /www
WORKDIR /www
COPY . /www/
RUN pip install -r requirements.txt
RUN python3 /www/manage.py collectstatic --noinput
码头工人组成
# use this file only for live production
# docker-compose up -d web
version: '3'
volumes:
db_psql:
postgis-data:
esdata:
services:
web:
build: .
restart: always
container_name: django_web
command: gunicorn --bind 0.0.0.0:8080 LG__CXS4.wsgi
depends_on:
- nginx
volumes:
- .:/www
ports:
- "8080:8080"
links:
- redis
nginx:
restart: always
image: "nginx"
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./staticfiles:/static
- ./mediafiles:/media
当我运行docker文件时,我得到: 5355个静态文件复制到'/ www / staticfiles'。 但是当我查看容器的staticfiles时,它是空的。
编辑:请参阅下面答案中的ngnix配置文件,以澄清错误。
如果您是通过docker-compose调出容器的,则可以删除
运行mkdir / www
WORKDIR / www
复制。 /万维网/
从Web Dockerfile中下载文件,因为您正在将卷装载到composer文件中
docker exec -it <nginx_container> bash
并确保将文件复制到/ static和/ media正确吗? 我通过容器内的地址而不是项目地址来更改STATIC_ROOT
变量的值
STATIC_ROOT = '/webapp/static' #'./static' <-Both work
然后在容器运行时在另一个命令窗口中抛出下一个命令
docker-compose exec name_service_web python manage.py collectstatic --noinput
怀疑者既不是Dockerfile,也不是docker-compose。 问题出在nginx上 。 它在别名中缺少www
。
有效的是:
server {
listen 80;
server_name localhost;
# serve static files
location /static/ {
alias /www/static/;
}
# serve media files
location /media/ {
alias /www/media/;
}
# pass requests for dynamic content to gunicorn
location / {
proxy_pass http://web:8080;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.