Предоставление нескольким контейнерам Docker уникальных публичных имен хостов на одном сервере Ubuntu

Предоставление нескольким контейнерам Docker уникальных публичных имен хостов на одном сервере Ubuntu

Я хочу настроить несколько контейнеров 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.comIP 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.)

Связанный контент