Docker-compose: nginx non funziona con django e gunicorn

Ho cercato di creare un ambiente in dockercompose where ci sono diversi contenitori:

  • Django
  • nginx
  • Postgres
  • DbData
  • Conservazione

Ho usato la seguente configuration:

app: restart: always build: src expose: - "8000" links: - postgres:postgres volumes_from: - storage_files_1 env_file: .env command: gunicorn barbell.wsgi:application \ -b 0.0.0.0:8000 -w 4 nginx: restart: always build: nginx ports: - "80:80" - "443:443" volumes_from: - storage_files_1 links: - app:app postgres: restart: always image: postgres:latest volumes_from: - storage_data_1 ports: - "5432:5432" 

Il mio file di configuration abilitato per i siti di nginx è stato così:

 server { listen 80; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location /static { alias /static/; autoindex on; } location / { proxy_pass http://app:8000; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; } } 

E non funziona – nginx restituisce sempre 502, ma serve file perfettamente statici. Ho anche provato la stessa configuration con uwsgi, nessuna fortuna. Tuttavia , quando combiniamo il Django con nginx e serviamo tutto dal medesimo contenitore, tutto funziona (di nuovo, sia su uwsgi che gunicorn).

Hai idea di cosa mi manchi?

Aggiornare

Ecco i log di nginx:

 *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.42.1, server: 0.0.0.0, request: "GET / HTTP/1.1", upstream: "http://172.17.1.75:8000/", host: "localhost" 

Si è scoperto che Gunicorn era il colpevole. La relativa configuration in un file ha risolto il problema.

gunicorn_config.py inserito nella stessa cartella di manage.py:

 bind = "0.0.0.0:8000" loglevel = "INFO" workers = "4" reload = True errorlog = "/var/log/gunicorn/error.log" accesslog = "/var/log/gunicorn/access.log" 

E alcuni cambiamenti in docker-compose.yml:

 app: restart: always build: src expose: - "8000" links: - postgres:postgres volumes_from: - storage_files_1 env_file: .env command: gunicorn --config=gunicorn_config.py barbell.wsgi:application 

Ora funziona come dovrebbe.

Quindi non ho visto alcun ulteriore feedback da te riguardo ai registri degli errori e che cosa può o non può essere hapenning per te; comunque ho rimosso il tuo esempio fino al suo più semplice come una dimostrazione di Docker+Django+NGINX funziona:

Vedi: docker-django-test

NB: Questo è in esecuzione su una mia infrastruttura che utilizza autodock Se si desidera replicare questo bisogno di questo snippet di docker-compose.yml :

 autodock: image: prologic/autodock ports: - "1338:1338/udp" - "1338:1338/tcp" volumes: - /var/run/docker.sock:/var/run/docker.sock autodockhipache: image: prologic/autodock-hipache links: - autodock - hipache:redis hipache: image: hipache ports: - 80:80 - 443:443 

Vedere: Un mini-PaaS basato su Docker