Как получить доступ к различным конечным точкам между двумя express серверами, работающими в разных контейнерах - PullRequest
0 голосов
/ 26 февраля 2020

Как сделать запрос на другой сервер, работающий в другом контейнере, из другого контейнера? Все они находятся в одной сети, и я использую docker -compose для управления ими.

Я могу легко получить доступ к конечным точкам аутентификации, потому что это определено на этом сервере, как показано ниже.

// Use login routes
app.use('/api/auth', routes.auth);

Как получить доступ к конечным точкам, определенным на другом сервере (другом контейнере)? Я попытался использовать http-proxy следующим образом, но мой код не работает.

app.use('/api/tasks', proxy({ target: 'http://localhost:5004/api/tasks'}));

Короче говоря, я хочу получить доступ к маршрутам сервера задач через сервер управления пользователями.

добрый совет.

Ответы [ 4 ]

0 голосов
/ 26 февраля 2020

Похоже, что для этого есть пакет express -http-proxy .

var proxy = require('express-http-proxy');
var app = require('express')();

app.use('/proxy', proxy('www.google.com'));
0 голосов
/ 26 февраля 2020

Запустите два контейнера, используя файл docker-compose. Инструкции и ссылки на учебники здесь

0 голосов
/ 26 февраля 2020

Предполагая, что вы запускаете оба контейнера с одним и тем же docker -компонованным файлом конфигурации, в котором каждый контейнер определяется как служба, вы сможете использовать имя службы в качестве имени хоста контейнера из своего кода JavaScript.

Учитывая следующее docker-compose.yml, например:

services:
  usermanagement_server:
    build: ./usermanagement_server
  tasks_server:
    build: ./tasks_server 

Вышеуказанная конфигурация позволит вам сделать следующее:

app.use('/api/tasks', proxy({ target: 'http://tasks_server/api/tasks'}));

Из docker -составить документацию :

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

0 голосов
/ 26 февраля 2020

Я предположил, что вы используете docker для контейнеров. Вы можете просто создать docker сеть и затем прикрепить к ней контейнеры. Это позволит вам вызывать контейнер с его именем, например http://fooAuth:1339, но вам нужен вызов API.

Также вы можете использовать Envoy/Istio service me sh (но это сложно реализовать и настройте, если вы новичок), чтобы определить пути и направить свои запросы ответственному приложению.

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