python перенаправление из контейнера в контейнер - PullRequest
2 голосов
/ 19 января 2020

Я использую docker -композиционную версию 1.25.0, у меня есть 2 контейнера

api - со скриптом python и flask

apach - некоторые gui

Я хочу, чтобы при получении запроса curl к api /test он перенаправлялся в контейнер apach gui внутренне, это код python в контейнере api:

@app.route('/test')
def test():
    return redirect('apach:4822/#/myapp', code=302)

Если я используйте этот код для моего хоста externaly return redirect('10.X.X.X:4822/#/myapp', code=302) он работает, но я хочу, чтобы перенаправление было внутренне между контейнерами, перенаправление не работает таким образом.

Я попытался сделать curl для apach:4822/#/myapp из API-контейнера и я вижу, что он проходит к контейнеру apach, но с моим python кодом его нет, и я получаю код 302. Страница не существует.

Как я могу заставить его работать? Спасибо.

1 Ответ

1 голос
/ 19 января 2020

Причина, по которой redirect('apach:4822/#/myapp', code=302) не работает, поскольку имя apach разрешаемо только внутри сети docker, настроенной с помощью docker -compose.

Flask отправляет HTTP 302 код с Местоположение * заголовок 1006 * установлен на apach:4822/#/myapp для вашего браузера. С компьютера, на котором работает ваш браузер, apach не может быть разрешена. Таким образом, вам нужно использовать только внешне разрешаемый IP-адрес.

Поскольку у вас есть несколько служб, которые вы хотите представить во внешнем мире, вам следует взглянуть на настройку обратного прокси-сервера, например nginx. Вы можете запустить nginx как сам контейнер. Вы можете выставить свои услуги на разных маршрутах, используя nginx. Например, ваша служба api может быть отображена на пути /api/, а контейнер apach - на пути /myapp. Пользователи будут подключаться к серверу nginx, а nginx будет направлять запрос к соответствующей серверной службе в зависимости от запрошенного URL-адреса. Когда пользователи подключаются к /api/test, вы можете перенаправить на /myapp с помощью redirect('/myapp', code=302). nginx затем перенаправит запрос в службу apach.

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