【问题标题】:Django Nginx Docker Gunicorn cant reachDjango Nginx Docker Gunicorn 无法到达
【发布时间】:2019-01-04 12:50:09
【问题描述】:

对不起,如果答案似乎很明显,但过去几个小时我一直在摇头。

我一直在关注多个尝试将我的应用程序 dockerize 的教程。无论我尝试了 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-compose.yml部分的nginx ports中的"8000:8000"更改为80:8000
  • @JonhyBeebop 如果我这样做,我会得到ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint nginx01 Error starting userland proxy: mkdir /port/tcp:0.0.0.0:80:tcp:172.19.0.5:8000: input/output error
  • @JonhyBeebop 好的 - 重新启动了一切 - 现在我得到了 502 bad gateway 。下一步怎么走?
  • 尝试查看您的 nginx 容器内部并尝试找到您的django.conf。您可以使用此docker exec -t -i container_name /bin/bash 进入容器。我认为回答者 Roman 是对的,您的 nginx 容器中没有 django.conf。现在它可以工作了,因为它使用默认的 nginx conf。

标签: django docker nginx gunicorn


【解决方案1】:

我昨天做了几乎相同的任务,我看到的唯一有价值的区别是您在 Django 容器中包含 django.conf,而不是在 nginx 容器中。我在docker-compose.ymlnginx 部分有以下卷:
- ./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:

upstream web {
    ip_hash;
    server web:8000;
}

server {
    location /static/ {
        alias /static/;
    }

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

通过这个设置,nginx 可以在127.0.0.1:80127.0.0.1 使用,因为 80 是默认的 http 端口。

【讨论】:

  • 我刚刚完成了这个 - 现在我看到了来自 nginx01 的日志,但我还在 localhost:800 上看到了 502 错误网关,并且在 0.0.0.0:8000 上仍然没有响应。还有什么看起来与您的设置不同的地方吗?
  • 说 - 无法访问页面@JonhyBeebop
  • @BorkoKovacev 编辑了我的帖子,添加了docker-compose.yml
  • @BorkoKovacev 再次编辑,添加了django.conf。注意 proxy_pass 字符串:你在配置中传递了两次端口(在上游和 proxy_pass 部分),我没有。可能是网关不好的原因
【解决方案2】:

错误太多了,请使用this配置。然后根据您的特定需求逐步更改它。

还可以查看有关 Nginx Docker Configurations 的此页面,因为您的主要问题之一是您没有公开您制作的 django nginx conf:

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

nginx 容器。 所以nginx 不知道如何映射你的配置。

【讨论】:

  • 如果您能详细说明这些错误是什么,而不是仅仅发布一个链接 - 我将不胜感激,这样我就可以了解哪里出了问题。如果您仔细阅读我的问题,我说我正在学习多个教程,其中我无法掌握哪种方式是正确的 docker 方式做事的正确方式,并且我不确定为什么我的具体调整的 nginx 没有按预期工作。
猜你喜欢
  • 2016-02-23
  • 1970-01-01
  • 2017-09-26
  • 2015-03-02
  • 2021-01-02
  • 2019-03-22
  • 2021-09-23
  • 2013-03-25
  • 2013-03-01
相关资源
最近更新 更多