docker-compose: сайт запущен, но css не применяется

#css #django #docker-compose

#css #django #docker-compose

Вопрос:

Я пытаюсь запустить свое приложение Django (версия 1.8.6) в контейнере docker с помощью docker-compose.

Это мой setting.py:

 MEDIA_ROOT = "/srv/media/"
MEDIA_URL = "/media/"

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

Это мой docker compose:

 version: "3"

services:
  #
  # Nettle API server
  #
  nettle:
    image: mcvitty_img
    command: python manage.py runserver 0.0.0.0:8000 --settings=sites.production.settings
    ports:
      - "80:8000"

volumes:
  bluebell: {}
  postgres-data: {}
  rabbitmq-data: {}
  

Я успешно запускаю сбор статических данных в моем Dockerfile:

 RUN python manage.py migrate --settings=sites.production.settings --fake-initial
RUN python manage.py sitetree_resync_apps --settings=sites.production.settings
RUN python manage.py collectstatic --settings=sites.production.settings --noinput
  

Но, к сожалению, это результат:

введите описание изображения здесь

Это журналы, которые я получаю:

 nettle_1  | [29/Sep/2020 15:08:19] "GET /static/css/all.min.css HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/widget.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/js/all.min.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/autocomplete.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/style.css HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/remote.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/text_widget.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/autocomplete.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/addanother.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/widget.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/js/datatableview.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/logo.png HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage1.jpg HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/addanother.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage2.jpg HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/text_widget.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage3.png HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/remote.js HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage4.jpg HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/autocomplete_light/style.css HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage6.jpg HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage8.png HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/css/all.min.css HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage7.jpg HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/images/frontimage5.png HTTP/1.1" 404 4463
nettle_1  | [29/Sep/2020 15:08:19] "GET /static/js/datatableview.js HTTP/1.1" 404 4463
  

Если я запрыгну в контейнер, я увижу, что статическая папка создана:

Комментарии:

1. Перейдите в раздел «проверка» на вашей веб-странице и посмотрите на путь, который он пытается использовать для css…

2. В разделе «консоль» вы также можете увидеть проблему: файл не загружается, или, например, «включена строгая проверка MIME», поэтому он отказывается загружать его с типом «текст / html»

3. Вероятно, ваш Dockerfile, когда вы копируете свой код.

4. Я предлагаю установить STATIC_ROOT = "/static/" и просто оставить все как есть. Создайте корневой /static каталог как часть вашего Dockerfile, и когда вы запустите collectstatic этот shoudl, поместите туда все. Проще, чем пытаться поместить его под свою базу, как у вас.

5. Или /srv/static/ , как вы сделали с MEDIA_ROOT