Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django静态文件未加载到Docker上?_Python_Django_Docker_Docker Compose_Static Files - Fatal编程技术网

Python Django静态文件未加载到Docker上?

Python Django静态文件未加载到Docker上?,python,django,docker,docker-compose,static-files,Python,Django,Docker,Docker Compose,Static Files,我正在使用Django3.0.6,希望将我的项目dockerize。除了静态文件外,其他一切都正常工作。当我正常运行我的项目时,静态文件被完全加载。但是,在dockerization之后,它们不会被加载并抛出404错误。 我的项目布局如下: ├── nginx │   ├── Dockerfile │   └── nginx.conf ├── src ├── applications   ├── configuration

我正在使用Django3.0.6,希望将我的项目dockerize。除了静态文件外,其他一切都正常工作。当我正常运行我的项目时,静态文件被完全加载。但是,在dockerization之后,它们不会被加载并抛出404错误。 我的项目布局如下:

    ├── nginx
    │   ├── Dockerfile
    │   └── nginx.conf
    ├── src
         ├── applications
         ├── configuration
         │   ├── asgi.py
         │   ├── __init__.py
         │   ├── __pycache__
         │   ├── settings.py
         │   ├── urls.py
         │   └── wsgi.py
         ├── Dockerfile
         ├── manage.py
         ├── requirements.txt
         ├── static
         │   ├── build
         │   ├── images
         │   └── vendors
         └── templates
settings.py:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
Dockerfile:

FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV SRC_DIR=/var/www/project/src
RUN mkdir -p $SRC_DIR
WORKDIR $SRC_DIR
ADD ./requirements.txt $SRC_DIR/requirements.txt
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . $SRC_DIR
docker-compose.yml:

version: '3'
services:
  web:
    build:
      context: ./src
      dockerfile: Dockerfile
    command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn --bind 0.0.0.0:8000 -w 4 configuration.wsgi"
    env_file: ./src/.environment
    volumes:
      - ./src:/var/www/project/src
      - ./src/static:/var/www/project/src/static
    ports:
      - 8000:8000
    depends_on:
      - db
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/project/src
      - ./src/static:/var/www/project/src/static
    depends_on:
      - web
nginx.conf:

    upstream view {
        server web:8000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://view;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;
        }

        location /static/ {
                autoindex on;
                alias /var/www/project/src/static;
        }

   }

我不知道是什么问题。请帮助我解决此问题。

尝试在静态位置上使用root而不是别名,在docker compose上,您不需要指定。/src/static,因为它包含在第一卷中。/src。希望对您有所帮助您的意思是:root/var/www/project/src/static?拉赫曼:你发现了吗?我也有同样的问题,如果使用Debug=False运行,您可以尝试在Dockerfile中运行collectstatic:
运行python manage.py collectstatic--noinput--clear