2015-12-24 5 views
7

Ich habe das folgende Setup bekam:Erlaube einem Container, der über docker-machine läuft, sich mit dem Mysql- oder XDEBUG-Port auf dem übergeordneten OSX-System zu verbinden, ohne eine OSX-DHCP-zugewiesene IP-Adresse zu verwenden?

  • OSX läuft MySQL auf Port 3306
  • XDebug auf alle Netzwerkadapter hören IDE aktiviert auf Port 9000 auf der Basis OSX System hören.
  • Docker-Maschine-Host auf dem OSX-System mit dem Host-IP 192.168.99.100
  • Ein Debian-basierten Docker-Containern mit einem MySQL-Client läuft auf dem Docker Host und HHVM lief mit xdebug läuft suchen, um eine glückliche Remote-Host zu verbinden, die auf Port 9000.

die IP-Adressen häufig auf dem OSX System ändern sich durch per DHCP zugewiesen werden, so dass ich möchte, dass die docker Behälter in der Lage sein, irgendwie in der Lage sein, den mySQL-Server, unabhängig davon, zu schlagen, was die native OSX IP Netzwerkadapter werden zugewiesen (ohne sie manuell zu aktualisieren). Außerdem brauche ich eine stabile IP-Adresse. Ich kann meine HHVM server.ini-Datei einen Remote-Host für Xdebug bereitstellen.

Mit dem Ausführen eines Basis-Systems von Linux ist dies kein Problem, da der Docker-Host und die tatsächliche native Maschine, die Docker laufen, ein und dasselbe sind. Es gibt auch mehrere Möglichkeiten, dass ein Container von der IP des Hosts erfährt, so dass das Problem nicht auf den Docker-Host trifft.

In OSX läuft jedoch docker-machine, der Host ist nicht das systemeigene OSX-System, sondern eine virtuelle Maschine, die in einer virtuellen Box ausgeführt wird (vorausgesetzt, Sie verwenden den vb-Treiber, und wer den sam hill blazes isn ' t?).

Das einzige, was ich mir vorstellen konnte, war das Weiterleiten der Anfrage auf 3306 an den Docker-Rechner-Host (192.168.99.100, der sich nie ändert) an den OSX-Port 3306. Dann habe der Container den Docker-Rechner-Host für Mysql getroffen Anfragen. WENN das funktioniert, könnte ich spülen und für jeden Hafen I Hafen wiederholen, den ich wie xdebug auf Port 9000 verbinden muss.

Kann jemand dieses erreichen oder einen anderen Vorschlag haben?

Antwort

18

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

  • Der Docker-Computer erstellt eine Virtualbox-VM mit zwei Netzwerkadaptern, von denen der eine als Host-Only und der andere als NAT-Adapter eingerichtet ist. Ich weiß nicht, warum es 2 schafft, aber
  • Der Host-only-Adapter bietet das OSX eine IP von 192.168.99.1 und die verschiedenen VMs verwenden es erhalten Adressen beginnend mit 192.168.99.100. 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 dient nur der Kommunikation zwischen den VMs).
  • Der NAT-Netzwerkadapter ist so eingestellt, dass der OSX die IP 10.0.2.2 und die VM-Get 10.0.2.15 erhält. Mit einem NAT können Sie sowohl von der Docker-Host-VM als auch von den auf dem Host ausgeführten Containern zum OSX-System unter 10.0.2.2 routen.
  • Da diese 10.0.2.2 Adresse für den OSX-Rechner nicht ändert (es sei denn, Sie schrauben mit den Netzwerkeinstellungen der virtuellen Box), Bingo, habe, was ich brauche.

    +0

    Ihre Erklärung half mir zu verstehen, wie man den HOST von einem Container erreicht, der in einer VM läuft, vielen Dank! Ich bin sehr überrascht, dass es keine Upvotes gab. Ich möchte darauf hinweisen, dass ich mit beiden IPs eine Verbindung zum HOST herstellen kann: 192.168.99.1 und 10.0.2.2 (nicht sicher warum, aber es funktioniert).Die Docker/VM-Einrichtung ist die Standardkonfiguration, die von Docker Toolbox installiert wird. – Calin