Как запустить все Docker-контейнеры по одному и тому же локальному IP-адресу в Django? - PullRequest
0 голосов
/ 29 декабря 2018

Я пишу приложение на основе django с докером, в котором 3 разных проекта работают в разных контейнерах.Все приложения django работают на 0.0.0.0:8000.

Но когда я проверяю ip-адрес контейнеров для просмотра приложения в браузере, все они запускаются с разными ip-адресами:

project1 запускается на 172.18.0.10:8000 можно получить доступ по адресу: 172.18.0.10:8000/app1 project2 выполняется по 172.18.0.9:8000 можно получить доступ по адресу: 172.18.0.9:8000/app2 project3 выполняется по 172.18.0.7:8000 можно получить доступ по адресу: 172.18.0.7:8000/app3

, что делает гиперссылки моего приложениянепригодным для использования.Как мне запустить все контейнеры на одном ip, 'localhost: 8000'?

Есть предложения, где я ошибаюсь?

1 Ответ

0 голосов
/ 02 января 2019

Вы ошибаетесь в дизайне, сопоставление нескольких контейнеров с одним портом ip + просто невозможно.Один порт на одном ip - это всегда одно приложение, которое слушает, независимо от того, является ли оно контейнерным приложением или нет.

Простое доказательство: а кто тогда решит, в какой контейнер отправить запрос?Для всех из них?Тогда кто решит, какой ответ является правильным?Вот для чего нужны ip-адреса и порты, чтобы можно было отправлять запросы конкретным приложениям на конкретных машинах.

Я думаю, вам следует пересмотреть все, что вы делаете, и немного больше изучить сетевые возможности.Есть несколько онлайн-курсов по этому вопросу.(Я не хочу вас обескураживать, просто нацелите вас в правильном направлении)

Простое решение без редизайна вашего приложения - установка обратного прокси вашего приложения (например, nginx).Это ответ на мой риторический вопрос.Обратный прокси-сервер может быть посредником, который может решить, в какое приложение отправить запрос, основываясь на чем-то другом, чем ip / port.Обратный прокси-сервер прослушивает некоторый конкретный порт, а затем по предоставленным вами правилам (например, на основе пути) может прокси-запрос на конкретное приложение / ip / порт и прокси-ответ обратно.

Но обратный прокси в этом случаеэто скорее взлом, чем правильное решение, имейте это в виду.

...