#docker #windows-container
#docker #windows-контейнер
Вопрос:
Я ищу способ получить доступ к контейнерам, которые запущены на сервере в локальной сети нашей компании, по доменным именам. До сих пор мне удавалось получить к ним доступ только по IP-адресам
Итак, установка такова. Docker (для Windows) запущен на сервере srv1.ourdomain.com
(Windows Server 2019), сеть для контейнера настроена с помощью l2bridge
драйвера, DNS-имя контейнера, указанное в команде запуска, является cont1
. Он доступен по DNS-имени на хосте docker ( srv1
) и по IP-адресу с моего компьютера.
Что я могу сделать, чтобы получить доступ к контейнеру по DNS-имени cont1.ourdomain.com
с моего локального компьютера, расположенного в той же локальной сети?
Я попытался использовать прокси (traefik), но он не может переписать URL-адреса в содержимом, поэтому веб-приложения, запущенные внутри контейнера, терпят неудачу. Из-за этого я не могу разместить несколько веб-приложений за этим прокси.
Я знаю, что можно сопоставить порт контейнера с портом хоста, и тогда он будет доступен из локальной сети через имя хоста и порт хоста, но для приложений, которые я запускаю, требуется сопоставление многих портов (например, 8 портов для каждого контейнера), и поскольку эти контейнеры являются недолговечными средами разработчика, будет чертовски сложно найти пул портов при запуске нового контейнера.
Итак, опять же, если я могу получить доступ к контейнеру и его портам по IP, есть ли способ сделать то же самое по DNS-имени?
UPD1. Хост контейнера — это виртуальный сервер, работающий на vmware. Я попытался следовать этим рекомендациям и настроить беспорядочный режим. Однако это не помогает с dns.
UPD2. Я также пробовал transparent
сеть. По какой-то причине DHCP никогда не может назначить propper IP, и контейнер получает автоматически настроенный IP из подсети 168.x.x.x.
Комментарии:
1. Вам нужен определенный порт в контейнере? Вы можете добавить nginx на корпоративный сервер и передавать трафик proxypass на открытый порт из вашего контейнера
Ответ №1:
Вы могли бы создать прозрачную сеть и сделать контейнер доступным для обнаружения в сети точно так же, как host. Однако рекомендуется использовать порты хоста.
Вы пробовали PathStrip
или PathPrefixStrip
с Traefik? Это должно позволить вам переписать URL-адреса для серверной части.
Комментарии:
1. Сеть Transparens, похоже, не слишком отличается от l2bridge. Единственное отличие, которое я вижу, заключается в том, что для этого требуется подмена Mac, и bridge автоматически выполнит перевод Mac. Вы уверены, что прозрачная сеть будет работать с DNS иначе, чем l2bridge?
2. Да, я пробовал как PathStrip, так и PathPrefixStrip. Это не работает для приложений, которые я собираюсь разместить внутри контейнеров. Traefik перезаписывает URL только в URL запроса, но не в теле ответа. Таким образом, все ссылки на css и скрипты все равно будут пытаться загружаться из корня,
domain.com/
даже если traefic работает по пути, подобномуdomain.com/deeper/path/
.3. Никакой обратный прокси-сервер не изменит содержимое или тело ответа. Вам необходимо обновить свои приложения, чтобы использовать относительные пути для ресурсов. Например, удалите
/
from/deeper/path
и используйтеdeeper/path
без имени хоста или корневого пути.4. Я не могу изменить приложения, они предоставляются мне как есть. Они действительно связаны с root, и они должны быть такими для активов, потому что сами приложения используют пути для других целей, таких как переключение языка интерфейса (
domain.com/en-eu/app
). В этом случае скрипты и CSS должны быть загружены из root в любом случае. Поэтому относительные пути не подойдут. Итак, снова propper DNS спас бы меня.