Confusión sobre el uso de volúmenes de Docker-Composose para servir archivos estáticos de Django
Docker novato aquí, tratando de configurar un proyecto Django simple usando Compose. he tenidoéxito con esto en el pasado, pero esta vez estoy intentando una configuración diferente, que no puedo entender por qué no funciona.
Tengo el siguiente archivo docker-compose.yml:
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
Mi / Dockerfile es:
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
Mi / docker / web / Dockerfile es:
FROM nginx:1.9
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/
Y mi archivo /docker/web/default.conf es:
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;
}
}
La salida de Docker muestra los archivos estáticos que se instalan en / static_files, pero nginx devuelve 404 para todos los archivos en / static. Si busco en mi carpeta .static (en la raíz del proyecto), el directorio está vacío (aparte de un archivo .gitkeep que tengo allí). Si corrodocker-compose app run ls -la /static_files
, el directorio está vacío, perodocker-compose app run ls -la /app/.static
tiene el archivo .gitkeep. Claramente, estoy malinterpretando algo con Docker y Compose. ¿Alguna idea sobre lo que estoy haciendo mal? Entiendo que elRUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput
debería estar escribiendo archivos en mi carpeta local .static y que nginx debería ver estos archivos; Tampoco está sucediendo.
Versiones de software: docker-compose versión 1.7.0, compilación 0d7bf73 y Docker versión 1.11.0, compilación 4dc5990 en OS X, con máquina acoplable conectada a la instancia de la nube.