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.