
Я хочу настроить несколько контейнеров Docker для обслуживания разных имен хостов на одной машине, избежав проблем с Kubernetes.
CONTAINER ID IMAGE COMMAND STATUS NAMES
673394ef1d4c busybox "top" Up 45 seconds nostalgic_shockley
d85756f57265 busybox "top" Up 51 seconds high_albattani
Допустим, у меня есть некий домен xyz.com
; мне нужна alpha.xyz.com
маршрутизация на nostalgic_shockley
и beta.xyz
маршрутизация на high_albattani
.
Я посмотрел /etc/hostname
и увидел какое-то локальное имя хоста.
root@saag:/home/root# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
...
root@saag:/home/root# cat /etc/hostname
saag
...
root@saag:/home/root# cat /etc/hosts
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Я даже пробовал назначать имена хостов отдельным IP-адресам Docker через , /etc/hostname
но все равно не мог связаться с контейнерами.
Кроме того, в панели управления доменом... мне следует просто настроить a-запись для alpha.xyz.com
IP beta.xyz.com
-адреса этого хоста?
решение1
Мне почему-то кажется, что вы на неправильном пути. Внутренняя сеть Docker не представлена во внешней сети хоста. Хост должен будет маршрутизировать трафик.
Обычно вам захочется разрешить подключения из внешнего мира.на какую-то услугу(т.е. в большинстве случаев это порт TCP) внутри контейнеров Docker.
Если вы говорите о HTTP и хотите порт 80 (или 443) для обоих контейнеров, это будет не так просто, как маршрутизация порта с внешнего интерфейса на них, поскольку вы не можете перенаправить его на оба. Поэтому моим предпочтительным решением было бы иметь Apache на хост-машине, выполняющий виртуальный хостинг на основе имени с двумя vhosts для двух разных имен DNS и перенаправляющий трафик на соответствующий контейнер Docker.
Кстати: если вам нужно сопоставить разные порты из внешней сети с контейнерами Docker, то подойдут более простые (сетевые) методы, например, переадресация на основе iptables или сопоставление портов хоста.
решение2
Кроме того, в панели управления доменом... мне следует просто установить a-запись для alpha.xyz.com и beta.xyz.com на IP-адрес этого хоста?
Панель управления доменом — это то, что вам нужноначать с.Ни Docker, ни сами контейнеры не могут создать поддомен из ничего; сначала его необходимо создать у поставщика услуг DNS.
После этого хост Docker может направлять пакеты в нужный контейнер, используя любые возможности, предоставляемые Docker (я предполагаю, переадресацию портов TCP/UDP iptables), или вы можете направлять HTTP-запросы, используя обратный прокси-сервер.
Для работы этого решения вам не нужно менять имена хостов контейнеров.
(Технически DNS поддерживает динамическую регистрацию в рамках протокола, но большинство поставщиков услуг либо не поддерживают ее вообще, либо требуют использовать свой собственный API вместо стандартных возможностей DNS.
Вдобавок ко всему, машины должны иметь способ аутентификации у провайдера DNS, а для этого нет хорошей универсальной системы. В результате такое автоматическое создание поддоменов на практике почти исключительно для Active Directory.)