Django Nginx Docker Gunicorn无法达到

时间:2018-07-27 11:42:11

标签: django docker nginx gunicorn

很抱歉,答案似乎很明显,但是过去几个小时我一直在head头。

我一直在关注多个教程,试图对我的应用程序进行docker化。无论url:port只是URL的哪种组合,我都尝试无法访问页面。

我不知道我在做什么错。我假设以下情况:

  • NGINX配置错误。 upstream web如何知道web是什么?我假设docker公开了它,但不确定这是否正确。
  • Web容器未正确公开地址和端口?

我尝试了多种设置,但没有用。

我有以下内容:

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
ADD ./django.conf /etc/nginx/conf.d/default.conf

#COPY ./django.conf /etc/nginx/sites-available/
#RUN ln -s /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled

docker-compose.yml

version: '3'

services:
  db:
    image: postgres:9.6
    ports:
     - "5432:5432"
    environment:
      - POSTGRES_USER=random_user
      - POSTGRES_PASSWORD=random_password
  redis:
    restart: always
    image: redis:4.0
    expose:
      - "6379"

  nginx:
    image: nginx:1.14.0
    container_name: nginx01
    ports:
      - "8000:8000"
    volumes:
      - ./code
    depends_on:
     - web
  web:
    build: .
    container_name: backend-api
    command: bash -c "python manage.py migrate && python manage.py collectstatic --noinput && gunicorn ops4_backend.wsgi -b 0.0.0.0:8000"
    depends_on:
      - db
    volumes:
      - ./code
    expose:
      - "8000"
    restart: always

django.conf

upstream web {
   ip_hash;
   server web:8000;
 }

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

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

docker ps -a docker ps -a

2 个答案:

答案 0 :(得分:2)

昨天我执行的任务几乎相同,而我看到的唯一有价值的区别是您在Django容器中包含了django.conf,而不是在nginx中。我在nginx的{​​{1}}部分有以下内容:
  docker-compose.yml(其中- ./nginx:/etc/nginx/conf.d是带有./nginx的文件夹)

编辑:这是我的django.conf

docker-compose.yml

version: '3' services: nginx: image: nginx restart: always ports: - "80:8000" volumes: - ./nginx:/etc/nginx/conf.d - ./static_cdn:/static depends_on: - web db: image: postgres restart: always web: build: . restart: always command: bash -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --no-input && gunicorn core.wsgi -b 0.0.0.0:8000" volumes: - .:/code expose: - "8000" depends_on: - db

django.conf

通过此设置,nginx可在upstream web { ip_hash; server web:8000; } server { location /static/ { alias /static/; } location / { proxy_pass http://web/; } listen 8000; server_name localhost; } 127.0.0.1:80上使用,因为默认的80是http端口。

答案 1 :(得分:0)

有太多错误的事情,请使用this配置。然后根据您的特定需求逐步进行更改。

也请检出讨论Nginx Docker Configurations的页面,因为您的主要问题之一是您没有公开制作的django nginx conf:

ADD ./django.conf /etc/nginx/conf.d/default.conf

nginx容器。 因此nginx不知道如何映射您的配置。