Confusão no uso de volumes de encaixe para compor para servir arquivos estáticos de django
O novato do Docker aqui, tentando configurar um projeto Django simples usando o Compose. eu tenho tidosucesso com isso no passado, mas desta vez estou tentando uma configuração diferente, que não consigo entender por que não funciona.
Eu tenho o seguinte arquivo 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
Meu / Dockerfile é:
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
Meu / docker / web / Dockerfile é:
FROM nginx:1.9
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/
E meu arquivo /docker/web/default.conf é:
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;
}
}
A saída da janela de encaixe mostra os arquivos estáticos sendo instalados em / static_files, mas o nginx retorna 404 para todos os arquivos em / static. Se eu procurar na minha pasta .static (na raiz do projeto), o diretório está vazio (exceto pelo arquivo .gitkeep que tenho lá). Se eu correrdocker-compose app run ls -la /static_files
, o diretório está vazio, masdocker-compose app run ls -la /app/.static
possui o arquivo .gitkeep. Claramente, estou entendendo mal algo com Docker e Compose. Alguma idéia do que estou fazendo de errado? Meu entendimento é que oRUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput
deve estar gravando arquivos na minha pasta .static local e o nginx deve ver esses arquivos; nem está acontecendo.
Versões de software: docker-compose versão 1.7.0, build 0d7bf73 e Docker versão 1.11.0, build 4dc5990 no OS X, com a docker-machine conectada à instância da nuvem.