Docker Nginx不收听浏览器

时间:2018-10-28 16:28:41

标签: python django docker nginx

我有这个docker-compose.yml文件:

version: '2'
services:
  nginx:
    image: nginx:latest
    container_name: nz01
    ports:
      - "8001:8000"
    volumes:
      - ./src:/src
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    container_name: dz01
    depends_on:
      - db
    volumes:
      - ./src:/src
    expose:
      - "8000"
  db:
    image: postgres:latest
    container_name: pz01
    ports:
        - "5433:5432"
    volumes:
      - postgres_database:/var/lib/postgresql/data:Z
volumes:
    postgres_database:
        external: true

这个dockerfile:

FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /src
RUN mkdir /static
WORKDIR /src
ADD ./src /src
RUN pip install -r requirements.pip
CMD python manage.py collectstatic --no-input;python manage.py migrate; gunicorn computationalMarketing.wsgi -b 0.0.0.0:8000

当我运行docker-compose builddocker-compose up -d时,Web和Postgres服务器不会返回错误日志,只是返回成功。 目前,这三个容器正在运行,但是当我转到浏览器并导航到:localhost:8001时,它不起作用。

它显示“连接已重新启动”错误消息。

尽管如此,Web服务器仍然不返回任何错误,所以我想我在Django应用中已正确配置了所有内容。我真的相信问题与Nginx有关,因为当我检查Nginx log(使用运动学)时,它仍然是空的。

为什么Nginx不听连接?

提示: 在新项目中发生此错误。我试图了解我是否有错,我正在运行一个旧项目,它可以完美运行。我试图将工作项目复制到我的新文件夹中,并删除所有现有的容器,然后尝试在新文件夹中运行该旧项目,这很令人惊讶。尽管它是可以在其他文件夹中使用的项目的精确副本,但现在无法使用...

编辑 在我的仓库中,我有一个带有config/nginx文件的helloworld.conf文件夹:

upstream web {  
  ip_hash;
  server web:8000;
}

server {

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

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

仍然出现相同的错误...我看不到任何日志错误。

Django容器日志

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.
[2018-11-05 13:00:09 +0000] [8] [INFO] Starting gunicorn 19.7.1
[2018-11-05 13:00:09 +0000] [8] [INFO] Listening at: http://0.0.0.0:8000 (8)
[2018-11-05 13:00:09 +0000] [8] [INFO] Using worker: sync
[2018-11-05 13:00:09 +0000] [11] [INFO] Booting worker with pid: 11

2 个答案:

答案 0 :(得分:0)

您的nginx配置应该类似于:

upstream web {  
   ip_hash;
   server web:8000;
}

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

答案 1 :(得分:0)

由于这类问题通常很难调试/重现,因此我创建了一个虚拟示例来仅运行Django应用并通过Nginx提供服务。您可以尝试根据需要进行调整。如果我错过了某些事情,或者做不该做的事情,请原谅我,但是我不熟悉Django框架。

用于Django容器的Dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code && \
    pip install django
WORKDIR /code
ADD helloworld /code

docker-compose.yml:

version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    container_name: django
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./helloworld:/code
    expose:
      - "8000"

config / nginx / django.conf:

upstream web {  
   ip_hash;
   server web:8000;
}

server {
     listen 80;
     server_name localhost;

     location / {
         proxy_pass http://web/;
     }
}

Django应用位于helloworld文件夹中。

在此示例中,仅通过流量。正确的方法是使用Unix套接字而不是端口,但是我又不熟悉Django。

相关问题