Статические файлы django не копируются в папку saticfiles контейнера докера - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь понять, что я делаю неправильно, когда пытаюсь скопировать мою папку static / media в 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")

Dockerfile

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

docker-compose

# 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'., но когда я просматриваю статические файлы контейнера - он пуст.

Редактировать: см. Файл конфигурации ngnix в ответе нижечто уточнить ошибку.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Я изменяю значение переменной STATIC_ROOT по адресу внутри контейнера, а не по адресу проекта

STATIC_ROOT = '/webapp/static' #'./static' <-Both work

И затем выбрасываю следующую команду в другом командном окне, когда контейнер работал

docker-compose exec name_service_web python manage.py collectstatic --noinput
0 голосов
/ 18 декабря 2018

подозреваемые не являются ни 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;
  }
}
0 голосов
/ 14 декабря 2018
  1. если вы вызываете контейнеры через docker-compose, вы можете удалить

    RUN mkdir / www

    WORKDIR / www

    COPY./ www /

из вашего веб-Dockerfile, так как вы монтируете том в файл композитора

Я бы подумал, что вы пытаетесь обслуживать статические файлы из вашего контейнера nginx, поэтому вы бы docker exec -it <nginx_container> bash и удостоверились, что файлы были скопированы в / static и / media там, верно?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...