Docker-compose:nginx不能和django和gunicorn一起工作

我一直试图在docker-compose中设置一个环境,其中有几个容器:

  • Django的
  • Nginx的
  • Postgres的
  • DbData
  • 存储

我已经使用了以下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" 

我的nginx网站启用configuration文件看起来像这样:

 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"'; } } 

它不起作用 – nginx总是返回502,但完美地提供静态文件。 我也尝试了与uwsgi相同的设置,没有运气。 然而 ,当我把Django与nginx结合起来,并提供来自同一个容器的所有东西时,一切工作(再次,在uwsgi和gunicorn上)。

任何想法我错过了什么?

更新

这里是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" 

原来,Gunicorn是罪魁祸首。 把它的配置文件解决了这个问题。

gunicorn_config.py放在与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" 

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 

现在它应该如此。

所以我还没有看到有关错误日志的任何进一步的反馈,以及可能发生或可能不会发生的事情。 但是我已经将你的例子简化为Docker+Django+NGINX工作的演示:

请参阅: docker-django-test

注意:这是运行在我使用autodock的一些基础设施上如果你想复制这个,你需要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 

请参阅: 基于Docker的迷你PaaS