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/
и переходить к прокси.