繁体   English   中英

Django静态文件未复制到Docker容器上的saticfiles文件夹中

[英]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配置文件,以澄清错误。

  1. 如果您是通过docker-compose调出容器的,则可以删除

    运行mkdir / www

    WORKDIR / www

    复制。 /万维网/

从Web Dockerfile中下载文件,因为您正在将卷装载到composer文件中

  1. 我认为您会尝试从nginx容器中提供静态文件,因此您将使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM