Соединение nginx proxy_pass отклонено для сервера разработки фляги

РЕДАКТИРОВАТЬ: мне нужно было указать хост как 0.0.0.0 в app.run, что решило мою проблему.

У меня есть веб-приложение, которое я пытаюсь настроить для использования докеров и компоновки докеров. Бэкенд представляет собой flask api, интерфейс — это реакцию, а nginx служит обратным прокси-сервером, каждая часть которого работает в своем собственном контейнере. Я все еще разрабатываю его, поэтому я пытаюсь использовать сервер разработки фляг для размещения приложения фляги и узел для размещения приложения реакции, с контейнером фляги, обслуживающим порт 5000, и узлом, обслуживающим порт 3000, как довольно стандартно.

Он успешно строится с помощью docker-compose -f docker-compose-dev.yml up --build, и каждый контейнер запускается. Я могу открыть локальный хост в своем браузере, который отлично загружает реагирующее приложение. Однако, когда я пытаюсь войти в систему, я получаю сообщение об ошибке неверного шлюза, что, исходя из выполненного мной поиска, означает, что nginx не может найти слушателя там, где он его ожидает.

Я пытался изменить значение proxy_pass в локации /api, но это не сработало. Нужно ли указывать IP вручную? Я пытался изменить порты в разделе flask-api моего файла docker-compose. Но и это не сработало.

Где я ошибаюсь?

Вот моя конфигурация nginx:

server {

  listen 80;

  location / {
    proxy_pass http://client:3000;
    proxy_redirect    default;
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Host $server_name;
  }

  location /api {
    proxy_pass        http://flask-api:5000;
    proxy_redirect    default;
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Host $server_name;
  }

}

И вот файл компоновки:

version: '3'
services:

  flask-api:
    image: flask-translate
    build:
      context: ./flask_back_end/
      dockerfile: Dockerfile-dev
    volumes:
      - "./flask_back_end/:/app"
    ports:
      - 5000:5000

  client:
    image: react-translate
    build:
      context: ./react-app/
      dockerfile: Dockerfile-dev
    ports:
      - 3000:3000
    depends_on:
      - flask-api
    volumes:
      - './env.json:/usr/src/app/src/env.json'

  nginx:
    image: nginx-translate
    build:
      context: ./nginx/
      dockerfile: Dockerfile-dev
    ports:
      - 80:80
    depends_on:
      - flask-api
      - client

И когда я запускаю контейнеры, фляжный сервер дает мне знать, что он работает http://127.0.0.1:5000/

Если я попытаюсь войти в систему, nginx выдает ошибку

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "POST /api/user/login HTTP/1.1", upstream: "http://172.18.0.2:5000/api/user/login", host: "localhost", referrer: "http://localhost/"

вместо ожидаемой переадресации соединения на API-сервер разработки фляги.

Из этого сообщения об ошибке я думаю, что клиент (то есть 172.18.01) отправляет почтовый запрос на localhost/api/user/login, который пытается перенаправить его на 172.18.02:5000/api/user/login, но слушателя там нет, поэтому в соединении отказано.

Каким-то образом я не смог найти этот пост в своих поисках, спасибо за ссылку, это решило мою проблему. Указание хоста в качестве app.run('host=0.0.0.0'), по-видимому, является причиной проблемы. Спасибо! Учитывая, что это похоже на дубликат, я не уверен, что смогу пометить комментарий как ответ. Если вы опубликуете это как ответ, я сделаю это.

jakks0 14.02.2019 18:23

@jakks0 Добро пожаловать в Stack Overflow! «Повторяющиеся» вопросы обычно должны быть закрыто как таковые, чтобы избежать распространения полезных ответов на сайте. Для некоторых вопросов это нормальный жизненный цикл, и я думаю, что этот подходит под эту категорию. Тем не менее, вопросы, закрытые как повторяющиеся, может быть полезно сохранить здесь, потому что это может помочь некоторым людям найти решение, используя другие условия поиска. Просто чтобы вы знали, в настоящее время сообщество голосует за его закрытие, но я думаю, что у вас должна быть какая-то кнопка для ускорения процесса в верхней части вашего вопроса (не уверен).

Pac0 15.02.2019 09:43

Моя репутация настолько низка, что кнопка не появляется (похоже, чтобы она появилась, вам нужен представитель 250).

jakks0 15.02.2019 23:50
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
3
429
0

Другие вопросы по теме