2016-04-19 2 views
1

Docker Rookie hier, versucht, ein einfaches Django-Projekt mit Compose einzurichten. Ich hatte success with this in the past, aber ich versuche dieses Mal ein anderes Setup, das ich nicht herausfinden kann, warum es nicht funktioniert.Verwechslung bei der Verwendung von docker-compose-Volumes für django statische Dateien

Ich habe 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 

Mein/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 

Mein/Docker/web/Dockerfile ist:

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 in/static_files, 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 docker-compose app run ls -la /static_files ausführen, ist das Verzeichnis leer, aber docker-compose app run ls -la /app/.static hat die .gitkeep-Datei. Natürlich verstehe ich etwas falsch mit Docker und Compose. Irgendwelche Gedanken darüber, was ich falsch mache? Mein Verständnis ist, dass die RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput Dateien in meinen lokalen .static-Ordner schreiben sollte und dass nginx diese Dateien sehen sollte; es passiert nichts.

Softwareversionen: docker-compose Version 1.7.0, Build 0d7bf73 und Docker Version 1.11.0, Build 4dc5990 unter OS X, mit Docker-Maschine verbunden mit Cloud-Instanz.

Antwort

4

Ich bin immer noch unklar, warum mein ursprünglicher Code nicht funktioniert, aber mein Code um Compose v2-Format arbeiten funktioniert, wo ich meine Volumes außerhalb der Dienste definiert haben.

Hier ist meine aktualisierte Docker-compose.yml Datei:

version: '2' 
services: 
    db: 
    image: postgres:9.4 
    restart: always 
    expose: 
     - "5432" 
    volumes: 
     - postgres-data:/var/lib/postgresql 
    app: 
    build: . 
    restart: always 
    env_file: .env 
    expose: 
     - "8000" 
    links: 
     - db:db 
    volumes: 
     - static-data:/static_files 
    web: 
    build: docker/web 
    restart: always 
    ports: 
     - "80:80" 
    links: 
     - app:app 
    volumes: 
     - static-data:/static_files 
volumes: 
    postgres-data: 
    driver: local 
    static-data: 
    driver: local 

Der Rest der Konfigurationsdateien gleich geblieben.

(Es kann, dass erwähnenswert sein, bevor ich diese neue Konfiguration lief, habe ich alle vorhandenen Docker Bände in docker volume ls aufgeführt gelöscht - vielleicht war meine eigentliche fix?)

Verwandte Themen