Соединение между контейнерами docker - PullRequest
0 голосов
/ 23 марта 2020

Я борюсь с подключением nginx и django (docker контейнер)

Моя стратегия такая: запустите опцию uwsgi http и порт 8001. (не сокет)

uwsgi --http :8001 --module myapp.wsgi --py-autoreload 1 --logto /tmp/mylog.log

тогда я подтвердил, что wget http://127.0.0.1:8001 работает.

, но из, nginx, он не может подключиться каким-либо образом. (111: Connection refused) ошибка

Однако из nginx wget http://django:8001 работает.

Как я могу подключиться между контейнером

upstream django {
    ip_hash;
    server 127.0.0.1:8001;
}

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;

    location /static {
        alias /static;
    }

    location / {
        proxy_pass  http://127.0.0.1:8001/;
        include     /etc/nginx/uwsgi_params;
    }
}

server_tokens off;

Я пытаюсь эту конфигурацию, но, если я попробуйте это, мой контейнер не запускается.

журнал выглядит так 2020/03/24 08:24:04 [emerg] 1#1: upstream "django" may not have port 8001 in /etc/nginx/conf.d/app_nginx.conf:16

upstream django {
    ip_hash;
    server django:8001;
}

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;

    location /static {
        alias /static;
    }

    location / {
        proxy_pass  http://django:8001/;
        include     /etc/nginx/uwsgi_params;
    }
}

server_tokens off;

мой docker составить очень просто ...

  nginx:
    image: nginx:1.13
    container_name: nginx
    ports:
      - "8000:8000"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./nginx/static:/static
    depends_on:
      - django

Наконец, благодаря помощи. мой сервер работает. окончательный conf выглядит следующим образом:

удалить upstream и использовать имя django вместо 127.0.0.1

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;

    location /static {
        alias /static;
    }

    location / {
        proxy_pass  http://django:8001/;
        include     /etc/nginx/uwsgi_params;
    }
}

server_tokens off;

1 Ответ

2 голосов
/ 24 марта 2020

Если они работают в разных контейнерах, 127.0.0.1 не является правильным IP; используйте имя другого контейнера, например,

proxy_pass http://django:8001;

, чтобы внутренний DNS Docker мог маршрутизировать вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...