Einem Container, der über docker-machine läuft, erlauben, sich mit dem MySQL- oder XDEBUG-Port des übergeordneten OSX-Systems zu verbinden, ohne eine OSX-DHCP-zugewiesene IP-Adresse zu verwenden?

7

Ich habe folgendes Setup:

  • OSX läuft mit MySQL und überwacht alle Netzwerkadapter an Port 3306
  • XDEBUG aktiviert IDE, die Port 9000 auf dem Basis-OSX-System überwacht.
  • docker-machine-Host, der auf dem OSX-System mit der Host-IP 192.168.99.100
  • ausgeführt wird
  • Ein debian-basierter Andock-Container mit einem mysql-Client, der auf dem Docker-Host läuft, und HHVM, der mit xdebug läuft, der versucht, sich mit einem glücklichen Remote-Host auf Port 9000 zu verbinden.

Die IP-Adressen ändern sich häufig auf dem OSX-System, da sie über DHCP zugewiesen werden. Daher möchte ich, dass der Andock-Container in der Lage ist, den mysql-Server zu erreichen, unabhängig davon, welche IP die nativen OSX-Netzwerkadapter zugewiesen bekommen manuell aktualisieren). Außerdem benötige ich eine stabile IP-Adresse. Ich kann meine HHVM server.ini-Datei einen Remote-Host für Xdebug bereitstellen.

Beim Ausführen eines Linux-Basissystems ist dies kein Problem, da der Docker-Host und das Andockfenster der nativen Maschine identisch sind. Außerdem gibt es mehrere Möglichkeiten, dass ein Container von der IP des Hosts erfährt, sodass das Problem nicht auf den Docker-Host trifft.

In OSX läuft docker-machine jedoch nicht als natives OSX-System, sondern als VM, die in einer virtuellen Box ausgeführt wird (vorausgesetzt, Sie verwenden den vb-Treiber und wer der sam hill ist, ist dies nicht) ?).

Das Einzige, was ich mir vorstellen konnte, war, die Anforderung auf 3306 an den Docker-Rechner-Host (192.168.99.100, der sich nie ändert) auf den Port 3306 des OSX zu portieren. Dann ließ der Container den docker-machine-Host für Mysql-Anfragen schlagen . WENN das funktioniert, könnte ich spülen und für jeden Port I Port wiederholen ich muss wie xdebug auf Port 9000 verknüpfen.

Weiß jemand, wie man das erreicht oder einen anderen Vorschlag hat?

    
Ray 24.12.2015, 22:33
quelle

1 Antwort

18

Es wurde ein Ausweg gefunden, ohne dass Änderungen vorgenommen werden müssen, die eine konsistente IP für die Verbindung mit dem OSX-Basissystem bereitstellen. Docker-Maschine richtet Dinge so ein, um dies zu ermöglichen.

  • Der Docker-Computer erstellt eine Virtualbox-VM mit zwei Netzwerkadaptern, von denen einer als reiner Host und der andere als NAT eingerichtet ist. Ich weiß nicht, warum es 2 schafft, aber
  • Der Host-only-Adapter bietet dem OSX eine IP-Adresse von 192.168.99.1 und die verschiedenen VMs, die ihn verwenden, erhalten Adressen, die mit 192.168.99.100 beginnen. Innerhalb des VM-Netzwerks können Sie jedoch nicht die Adresse 192.168.99.1 verwenden, um Ports auf dem übergeordneten OSX-System zu treffen (nicht sicher, warum, aber das Erraten des Hosts beabsichtigt nur die Kommunikation zwischen den VMs).
  • Der NAT-Netzwerkadapter ist so eingestellt, dass OSX die IP-Adresse 10.0.2.2 und VM 10.0.2.15 erhält. Mit einem NAT können Sie sowohl von der Docker-Host-VM als auch von Containern, die auf dem Host ausgeführt werden, zum OSX-System unter 10.0.2.2 routen.

Da diese 10.0.2.2-Adresse für den OSX-Rechner nicht geändert wird (es sei denn, Sie verschönern mit den Netzwerkeinstellungen der virtuellen Box), bekommen Sie, was ich brauche.

    
Ray 24.12.2015, 23:09
quelle