docker nginx ошибка перенаправления порта в контейнер - PullRequest
0 голосов
/ 06 апреля 2020

Требуется помощь в настройке Nginx для пересылки входящих запросов через порт 10000 в приложение, работающее в контейнере.

У меня есть изображение docker, содержащее 3 контейнера. 1-й контейнер - это сервер Nginx, 2-е flask - приложение, а 3-й - сервер Dataiku DSS.

- flask приложение работает как следует, и я могу подключиться через порт 443, но при попытке подключения к на сервере Dataiku DSS я получаю ошибку 502. «Bad Request».

Я могу запустить контейнер сервера DSS самостоятельно, запустив docker run 10000:10000 dataiku/dss, и все работает как положено. Я могу подключиться через 127.0.0.1:10000. Я также попробовал конфигурацию Nginx, когда сервер DSS работал полностью отдельно от проекта, но все же не повезло.

составной файл выглядит следующим образом:

version: "3.7"

services:

  flask:
    build: ./flask
    container_name: flask
    restart: always
    image: trac
    environment:
      - APP_NAME=Trac
    expose:
      - 8080
    depends_on:
      - nginx
    volumes:
      - c:/trac_temp_files:/temp_files

  dss:
    build: ./dss
    image: dss
    container_name: dss
    restart: always
    expose:
      - 10000
    ports:
      - "10000:10000"
    depends_on:
      - nginx

  nginx:
    build: ./nginx
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "10000:10000"

nginx conf:

server {
    # Host/port on which to expose Data Science Studio to users
    listen 10000 ssl;
    ssl_certificate wildcard.crt;
    ssl_certificate_key wildcard.key;
    location / {
        # Base url of the Data Science Studio installation
        proxy_pass http://0.0.0.0:10000/;
        proxy_redirect off;
        # Allow long queries
        proxy_read_timeout 3600;
        proxy_send_timeout 600;
        # Allow large uploads
        client_max_body_size 0;
        # Allow protocol upgrade to websocket
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}


server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl http2 default_server;
    ssl_certificate wildcard.crt;
    ssl_certificate_key wildcard.key;
    client_max_body_size 100M;
    location / {
        include uwsgi_params;
        uwsgi_pass flask:8080;
    }
}

Я довольно новичок в docker, поэтому мне интересно, есть ли что-то, что я упустил, понял.

Я пытаюсь следовать тому, что рекомендует Dataiku о подключение через SSL, но я предполагаю, что руководство не предполагает, что вы используете их docker image https://doc.dataiku.com/dss/latest/installation/proxies.html#reverse -proxy

Кроме того, причиной использования docker является машина где все это будет размещено, у него нет доступа к inte rnet и он виден только той сети, в которой я нахожусь.

Любая помощь будет потрясающей, поскольку я немного застрял без этой работы.

ОБНОВЛЕНИЕ:

Желаемый результат того, чего я пытаюсь достичь, - это возможность подключения пользователя к любому приложению.

Например:

www.example.com:5000 = app1
www.example.com:5001 = app2

Если вышеупомянутое невозможно, как бы я чего-то достиг как

www.example.com/app1 = app1
www.example.com/app2 = app2

1 Ответ

0 голосов
/ 06 апреля 2020

Вам нужно только выставить порты в nginx, потому что вы используете его в качестве прокси-сервера. А также, в ваш docker compose файл добавьте том для файла конфигурации nginx следующим образом:

volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...