Docker-Container unter MacOS X im Internet erreichbar machen

Executor55

Lt. Commander
Registriert
Okt. 2004
Beiträge
1.699
Hallo
ich bin recht neu was Docker-Umgebungen betrifft und habe dazu eine Frage.
Ich habe mir die DockerToolbox (Docker + Kitematic) geladen und auf meinem MacBookPro installiert.
Nun laufen da schon erfolgreich 3 Container und ich komme über Safari auf meinen Tomcat Webserver.
Allerdings nur über die IP-Adresse http://192.168.99.100:8080 und nicht über http://localhost:8080 bzw. http://192.168.178.56:8080.

Kurze IP-Übersicht:
Fritzbox (Internet): ...................... 192.168.178.1
MacBook (WLAN): ........................ 192.168.178.56
MacBook vboxnet0 (Docker VM): .... 192.168.99.1
Docker Host den ich erreichen will: . 192.168.99.100
Docker Host (intern): .................... 172.17.0.1
Docker Container (intern, Tomcat): . 172.17.0.4

Wie komme ich nun von zb. einem anderen Gerät in meinem Fritzbox-LAN auf diesen Webserver?
Ich habe mir Sämtliche Docs über Netzwerk zu Docker durchgelesen aber komme irgendwie nicht auf den grünen Zweig.
Wenn ich mich auf einen der Container verbinde und www.google.de anpinge, bekommen alle eine Antwort.
Und im Wireshark steht als Source-IP immer die IP meines MacBooks drinnen (192.168.178.56).

Fehlt hier nur eine Route oder muss ich irgendwo einen Port nach außen noch freigeben?

Danke für Für Hilfe

Mit freundlichen Grüßen Julian
 
Leider habe ich zu wenig Expertise mit Docker, aber falls sich keiner mehr meldet, kannst dir einen Apache2 Server in Mac OSX installieren und dann Reverse Proxies anlegen: https://www.digitalocean.com/commun...er-as-reverse-proxy-using-mod_proxy-extension

Beispiel:

MacOSX IP: 192.168.1.90

Docker1 IP: 192.168.100.1
Docker1 Service: Tomcat
Docker1 Service Port: 8080

Docker2 IP: 192.168.100.1
Docker2 Service: MySQL
Docker2 Service Port: 3306

Reverse Proxy 1:

Code:
<VirtualHost *:12000>
ProxyPass http://192.168.100.1:8080/
ProxyPassReverse http://192.168.100.1:8080/
</VirtualHost>

Du kannst dann auf den Tomcat-Server über http://192.168.1.90:12000 zugreifen

Reverse Proxy 2:

Code:
<VirtualHost *:30000>
ProxyPass 192.168.100.2:3306/
ProxyPassReverse 192.168.100.2:3306/
</VirtualHost>

Du kannst dann auf den MySQL-Server über 192.168.1.90:30000 zugreifen
 
Das virtuelle Interface hängt in einem anderem Subnetz als das native Interface des Hosts. Entweder richtest du dir also eine Netzwerkbrücke ein, oder aber du lässt das virtuelle Interface mit in dein normalerweise genutztes Subnetz.

Unter localhost vom Host werden die Container wahrscheinlich normalerweise nicht sichtbar sein (Ich habe noch nie mit Docker rumgespielt, beim Konzept von Containern würde es mich aber wundern)
 
Danke soweit für die Antworten.
@blablub1212:
Der Ansatz ist gut, aber ich will lieber wissen wie ich generell das mit Ports handhabe. Beim nächsten Mal will ich dann keinen Webserver, sondern etwas anderes im Internet veröffentlichen und dann klappt das mit den Reverse Proxy's leider nicht mehr.

@Piktogramm:
Deine beiden Vorschläge sind richtig. Führt mich zu meiner ursprünglichen Frage:
Wie mach ich das eine oder das andere? :D

Gruß
 
Executor55 schrieb:
Wie mach ich das eine oder das andere? :D

Bin da gerade sensibel nach mehrere Arbeitstage Korrektur solcher Schreibfehler. Großschreibung in Verbindung mit bestimmten Artikeln fetzt!
Bei deinem Netzwerkproblem sollte wie RTFM Gültigkeit haben. Beim Überfliegen schien mir die Anleitung zum Einrichten der Netzwerkbrücke recht brauchbar. :) https://docs.docker.com/engine/userguide/networking
 
Wer Schreibfehler findet darf Sie behalten ;)

Ne im Ernst. Genau das habe ich schon 3-4 mal jetzt durchsucht und gefunden habe ich da nichts.
Bin aber im Github auf die Lösung gekommen (die übrigens nirgends in der Docker Dokumentation zu finden ist):
https://github.com/docker/docker/issues/4007

Mit dem folgenden Befehl kann ich keinen Port an den Host freigeben:
Code:
VBoxManage controlvm default natpf1 "name,tcp,127.0.0.1,8080,,8080"
Dabei steht "name" für den spezifischen Namen der Portfreigabe, also in meinem Fall Tomcat zb.
8080 für den Port
und "default" ist der Name der von MacOS bzw. Docker angelegten docker-vm.
Listen kann man sich seine VMs mit: "vboxmanage list vms"

Jetzt klappts auch mit http://localhost:8080
 
Zurück
Oben