Confusion über die Verwendung von Docker-Compose-Volumes zum Bereitstellen von statischen Django-Dateien

Docker-Neuling hier, der versucht, mit Compose ein einfaches Django-Projekt einzurichten. Ich hatteerfolg damit in der Vergangenheit, aber ich versuche dieses Mal ein anderes Setup, was ich nicht herausfinden kann, warum es nicht funktioniert.

Ich habe die folgende docker-compose.yml-Datei:

data:
  image: postgres:9.4
  volumes:
    - /var/lib/postgresql
  command: /bin/true

db:
  image: postgres:9.4
  restart: always
  expose:
    - "5432"
  volumes_from:
    - data

app:
  build: .
  restart: always
  env_file: .env
  expose:
    - "8000"
  links:
    - db:db
  volumes:
    - .static:/static_files

web:
  build: docker/web
  restart: always
  ports:
    - "80:80"
  links:
    - app:app
  volumes_from:
    - app

My / Dockerfile ist:

FROM python:3.5
ENV PYTHONUNBUFFERED 1

ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput

CMD gunicorn mysite.wsgi:application -b 0.0.0.0:8000

Meine / docker / web / Docker-Datei lautet:

FROM nginx:1.9
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/

Und meine /docker/web/default.conf Datei ist:

server {
    listen 80 default_server;

    location /static/ {
      autoindex on;
      alias /static_files/;
    }

    location / {
        proxy_pass http://app:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Die Ausgabe von docker zeigt die statischen Dateien, die in / static_files installiert werden, aber nginx gibt 404 für alle Dateien unter / static zurück. Wenn ich in meinem .static-Ordner (im Stammverzeichnis des Projekts) nachschaue, ist das Verzeichnis leer (abgesehen von einer .gitkeep-Datei, die ich dort habe). Wenn ich @ rendocker-compose app run ls -la /static_files, das Verzeichnis ist leer, aberdocker-compose app run ls -la /app/.static hat die .gitkeep-Datei. Ich habe mit Docker und Compose offensichtlich ein Missverständnis. Irgendwelche Gedanken darüber, was ich falsch mache? Mein Verständnis ist, dass dasRUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput sollte Dateien in meinen lokalen .static-Ordner schreiben und nginx sollte diese Dateien sehen; beides passiert nicht.

Software-Versionen: Docker-Compose-Version 1.7.0, Build 0d7bf73 und Docker-Version 1.11.0, Build 4dc5990 unter OS X, Docker-Maschine mit Cloud-Instanz verbunden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage