[Python] Django static files not served with Docker

Discussão em 'Python' iniciado por Stack, Junho 5, 2025.

  1. Stack

    Stack Membro Participativo

    EDIT

    I've just seen that I've made an error STATICFILES_DIR instead of STATICFILES_DIRS but it doesn't change...

    and it raise n advertising because STATICFILES_DIRS contain STATIC_ROOT

    project architecture in web container (simplified)

    - web container
    |_app
    |_core
    |_settings
    |_app1
    |_static
    |_app2
    |_static
    |_requirements
    |_static
    |_Dockerfile.prod
    |_entrypoint.prod.sh
    |_manage.py
    |_nginx
    |_Dockerfile
    |_nginx.conf
    |_.env.prod
    |_docker-compose.prod.yml


    EDIT 19/11/2020

    I've copied my css file into /usr/src/app/static/ folder in my web container to test that nginx could correctly serve static files

    docker cp styles.css coverage-africa-on-docker_web_1:/usr/src/app/static/css/styles.css

    And it works so that it confirm that issue come from the fact that collectstatic command do not collect static files from /my_project/app/static/ folder even if I specify Django to look in this folder using STATICFILES_DIR = (os.path.join(BASE_DIR, 'static'),) variable in settings prod.py (see below my first EDIT)

    So I tried to python manage.py findstatic styles.css command in my web container and my file is not found


    No matching file found for 'styles.css'.
    ​

    So, this means that STATICFILES_DIR = (os.path.join(BASE_DIR, 'static'),) is the wrong path...

    BASE_DIR return /usr/src/app/ path so in my understanding, it is the goog path...


    EDIT

    I run docker logs coverage-africa-on-docker_web_1 to see what happened and static files seems to be collected and copied in correct folder in container

    but css, images, js files are not served

    I run docker exec -it coverage-africa-on-docker_web_1 sh and go to '/usr/src/app/static' folder and I can see admin, debug_toolbar,randomization(one app that have subfolder static... but not images, css, js


    139 static files copied to '/usr/src/app/static', 1 unmodified.
    ​

    I've hadded STATICFILES_DIR = (os.path.join(BASE_DIR, 'static'),) in settings prod.py to force collectstatic look for static files in /my_project/app/static/ folder

    but doesn't change anything...


    please find below my app architecture.

    static files are located at /my_project/app/static/

    when i 'jump' into my web container docker exec -it my_project sh /usr/src/app/static folder do not contain static files

    I guess problem is path to serve static files but what is wrong with my configuration?

    - my_project
    |_app
    |_core
    |_wsqi.py
    |_settings
    |_base.py
    |_dev.py
    |_prod.py
    |_urls.py
    |_requirements
    |_base.txt
    |_dev.txt
    |_prod.txt
    |_static
    |_Dockerfile.prod
    |_entrypoint.prod.sh
    |_manage.py
    |_.dockerignore
    |_nginx
    |_Dockerfile
    |_nginx.conf
    |_.env.prod
    |_.gitignore
    |_docker-compose.prod.yml


    prod.py

    SITE_ID = 1

    STATIC_URL = "/static/"
    STATIC_ROOT = os.path.join(BASE_DIR, "static")
    STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

    MEDIA_URL = "/media/"
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")


    docker-compose.prod.yml

    version: '3.7'

    services:
    web:
    restart: always
    build:
    context: ./app
    dockerfile: Dockerfile.prod
    restart: always
    command: gunicorn core.wsgi:application --bind 0.0.0.0:8000
    volumes:
    - ./app:/usr/src/app
    - static_volume:/usr/src/app/static
    - media_volume:/usr/src/app/media
    expose:
    - 8000
    env_file:
    - ./.env.prod
    extra_hosts:
    - "db:192........"

    nginx:
    build: ./nginx
    restart: always
    volumes:
    - static_volume:/usr/src/app/static
    - media_volume:/usr/src/app/media
    ports:
    - 1338:80
    depends_on:
    - web
    volumes:
    static_volume:
    media_volume:


    nginx.conf

    upstream app {
    server web:8000;
    }

    server {

    listen 80;
    server_name localhost;
    location / {
    proxy_pass http://app;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
    }

    location /static/ {
    alias /usr/src/app/static/;
    }

    location /media/ {
    alias /usr/src/app/media/;
    }

    }

    Continue reading...

Compartilhe esta Página