
Ich möchte mehrere Docker-Container einrichten, um verschiedene Hostnamen auf einer einzigen Maschine bereitzustellen, ohne den Aufwand von Kubernetes.
CONTAINER ID IMAGE COMMAND STATUS NAMES
673394ef1d4c busybox "top" Up 45 seconds nostalgic_shockley
d85756f57265 busybox "top" Up 51 seconds high_albattani
Nehmen wir an, ich habe eine Domäne xyz.com
; ich möchte alpha.xyz.com
eine Weiterleitung zu nostalgic_shockley
und beta.xyz
eine Weiterleitung nach high_albattani
.
Ich habe nachgeschaut /etc/hostname
und es hat einen lokalen Hostnamen.
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
Ich habe sogar versucht, die Hostnamen einzelnen Docker-IP-Adressen zuzuweisen, /etc/hostname
konnte die Container jedoch immer noch nicht erreichen.
Und sollte ich in meinem Domänenverwaltungsbereich einfach den A-Eintrag für alpha.xyz.com
und beta.xyz.com
auf die IP-Adresse dieses Hosts festlegen?
Antwort1
Irgendwie glaube ich, dass Sie auf dem Holzweg sind. Das interne Docker-Netzwerk ist im externen Netzwerk des Hosts nicht vertreten. Der Host muss den Verkehr umleiten.
Normalerweise möchten Sie Verbindungen von der Außenwelt zulassenzu einem Dienst(d. h. in den meisten Fällen ein TCP-Port) innerhalb der Docker-Container.
Wenn Sie über HTTP sprechen und Port 80 (oder 443) für beide Container möchten, ist es nicht so einfach, einen Port von der externen Schnittstelle an sie weiterzuleiten, da Sie ihn nicht an beide weiterleiten können. Meine bevorzugte Lösung wäre daher, einen Apache auf dem Hostcomputer zu haben, der namensbasiertes virtuelles Hosting mit zwei virtuellen Hosts für die beiden unterschiedlichen DNS-Namen durchführt und den Datenverkehr an ihre jeweiligen Docker-Container weiterleitet.
Übrigens: Wenn Sie unterschiedliche Ports vom externen Netzwerk den Docker-Containern zuordnen möchten, würden einige einfachere (netzwerkbasierte) Methoden funktionieren, z. B. einige auf iptables basierende Weiterleitungen oder Host-Port-Zuordnungen.
Antwort2
Und sollte ich in meinem Domänenverwaltungsbereich einfach den A-Eintrag für alpha.xyz.com und beta.xyz.com auf die IP-Adresse dieses Hosts setzen?
Das Domänenverwaltungspanel ist das, was Siebeginnen mit.Weder Docker noch die Container selbst können aus dem Nichts eine Subdomäne erstellen; sie muss zuerst innerhalb des DNS-Dienstanbieters erstellt werden.
Sobald dies erledigt ist, kann der Docker-Host Pakete mithilfe der von Docker bereitgestellten Einrichtungen (ich nehme an, TCP/UDP-Portweiterleitung über iptables) an den richtigen Container weiterleiten – oder Sie können HTTP-Anfragen mithilfe eines Reverse-Proxys weiterleiten.
Sie müssen die Container-Hostnamen nicht ändern, damit dies funktioniert.
(Technisch gesehen unterstützt DNS die dynamische Registrierung innerhalb des Protokolls, aber die meisten Dienstanbieter unterstützen dies entweder überhaupt nicht oder verlangen die Verwendung ihrer benutzerdefinierten API anstelle der Standard-DNS-Funktionen.
Darüber hinaus müssten die Maschinen eine Möglichkeit haben, sich beim DNS-Anbieter zu authentifizieren, und dafür gibt es kein gutes universelles System. Daher ist eine solche automatische Subdomänenerstellung in der Praxis fast ausschließlich Active Directory vorbehalten.)