如何使用docker-compose设置nginx和django?

时间:2017-06-16 15:17:16

标签: django nginx docker docker-compose

我在使用Docker(docker-toolbox,docker-compose)设置Django和所需的所有依赖项时遇到了这种情况。

我在尝试访问我的网址http://192.168.99.100:8000/时遇到错误,该网址为 502 Bad Gateway(nginx / 1.13.1)。对于这个错误,我不知道它来自何处,因为它是我第一次在Docker上使用Django和nginx。

docker-compose.yml:

version: '2'  
services:  
  nginx:
    image: nginx:latest
    container_name: nz01
    ports:
      - "8000:8000"
    volumes:
      - ./src:/src
      - ./config/nginx:/etc/nginx/conf.d
      - /static:/static
    depends_on:
      - web
  web:
    ...
...

Dockerfile:

FROM python:latest
ENV PYTHONUNBUFFERED 1

#ENV C_FORCE_ROOT true

ENV APP_USER myapp
ENV APP_ROOT /src
RUN mkdir /src;
RUN groupadd -r ${APP_USER} \
    && useradd -r -m \
    --home-dir ${APP_ROOT} \
    -s /usr/sbin/nologin \
    -g ${APP_USER} ${APP_USER}

WORKDIR ${APP_ROOT}

RUN mkdir /config
ADD config/requirements.pip /config/
RUN pip install -r /config/requirements.pip

USER ${APP_USER}
ADD . ${APP_ROOT}

config / nginx / ... .conf

upstream web {  
  ip_hash;
  server web:8000;
}

server {

    location /static/ {    
        autoindex on;    
        alias /static/; 
    }

    location / {
        proxy_pass http://web/;
    }
    listen 8000;
    server_name localhost;
}

我做错了吗?

1 个答案:

答案 0 :(得分:3)

这里的问题是gunicorn命令行参数,缺少-b标志。需要使用-b标志启动它以与指定的地址绑定。在您的情况下,gunicorn会将自身绑定到默认127.0.0.1:8000,而其他容器无法访问该默认command: bash -c 'python manage.py makemigrations && python manage.py migrate && gunicorn oqtor.wsgi -b 0.0.0.0:8000' 。因此,只需将web命令更改为以下内容:

java.util.ArrayList

这应该可以通过nginx访问您的Web应用程序。