Как добиться такого потока - PullRequest
0 голосов
/ 18 июня 2019

Я бы хотел, чтобы поток был таким, как на картинке. Есть ли способ перехватить все HTTP-запросы в контейнере Docker, изменить их заголовки и затем отправить их? Обратите внимание, что URI первого запроса указывает на APP 4, а не APP 2. enter image description here

1 Ответ

0 голосов
/ 18 июня 2019

Docker не поддерживает напрямую то, что вы описываете.Единственная сетевая настройка , которую он действительно поддерживает «из коробки», имеет частную сеть для каждого приложения с NAT для хоста;если вы думаете, что вам нужна какая-то более сложная топология, или перехватчики трафика, или автоматические прокси, вы находитесь на территории «создайте ее вручную».

На показанной вами диаграмме две вещи выпрыгивают из меня,«Приложение 1» и «Приложение 2» отображаются в одном и том же контейнере, и это редко является лучшей практикой.Каждый компонент отображается с URL-адресом localhost, но это также слегка тонкая тема (внутри контейнера Docker, сам контейнер - localhost).

Очень типичная настройка не делает 'Мы не можем использовать автоматический перехват трафика как таковой , но только внешние клиенты используют своего рода обратный прокси-сервер.Это выглядит немного похоже на

+- Docker network ----------------------+
| +- Container -+     +- Container -+   |
| | Application | <-- | Nginx Proxy | <---- Client
| +-------------+     +-------------+   |
+---------------------------------------+

Вы можете запустить этот стек с

docker network create appnet
docker run --net appnet --name application my/application
docker run --net appnet --name nginx_proxy -p 8081:80 my/nginx

Поскольку два контейнера находятся в одной и той же сети Docker, конфигурация nginx может proxy_pass http://application/;.Из-за опции -p внешние клиенты могут достигать http://host.example.com:8081/ и переходить к прокси.

...