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.