Wie kann ich auf einen Andock-Container zugreifen, der von einem anderen Host auf MacOSX ausgeführt wird?

8

Ich versuche, mit Docker anzufangen und den Ubiquiti-Video-Controller laufen zu lassen. Ich habe Docker Toolbox installiert und es geschafft, den Container auf meinem Yosemite-Host laufen zu lassen und kann auf demselben Mac zugreifen, indem ich auf die von docker-machine ip default zurückgegebene IP zugreife. Aber ich möchte auf anderen Rechnern im Netzwerk darauf zugreifen und eventuell Port-Forwarding auf meinem Heim-Router einrichten, damit ich außerhalb meines Heimnetzwerks darauf zugreifen kann.

Wie in boot2docker issue 160 vorgeschlagen, konnte ich mit der Virtualbox GUI ein Bridged Network Adapter, aber nach dem Neustart der VM docker-machine kann keine Verbindung mehr zur VM herstellen. docker env default bleibt lange hängen, gibt aber eventuell einige Umgebungsvariablen zusammen mit der Nachricht Maximum number of retries (60) exceeded zurück. Wenn ich die Shell mit diesen Variablen aufstelle und versuche, docker ps auszuführen, bekomme ich den Fehler: An error occurred trying to connect: Get https://10.0.2.15:2376/v1.20/containers/json: dial tcp 10.0.2.15:2376: network is unreachable .

Ich vermute, dass docker-machine einige Annahmen über die Netzwerkkonfiguration in der VM hat und ich mische sie auf.

docker-machine ssh ifconfig -a gibt Folgendes zurück:

%Vor%

eth0 scheint eine vernünftige DHCP-Adresse von meinem Router zu bekommen.

Ich bin mir nicht sicher, ob das der richtige Ansatz ist oder ob ich den falschen Baum anbreche. Wenn ich den überbrückten Netzwerkadapter auf der VM arbeiten kann, weiß ich nicht, wie ich dann meinen Docker-Container dazu bringen soll, ihn zu benutzen. Ich habe versucht, im Internet hoch und niedrig zu suchen. Ich habe Dutzende von Websites gefunden, die erklären, wie Sie auf den Container zugreifen müssen, indem Sie den Wert von docker-machine ip default anstelle von localhost verwenden, aber nichts, um zu erklären, wie von einem anderen Host aus zugegriffen werden kann. Vielleicht muss ich meine Googling-Fähigkeiten verbessern.

    
chetstone 15.09.2015, 19:34
quelle

4 Antworten

7

Das funktioniert für mich

  • mit gestoppter VM fügen Sie ein drittes "Bridge" -Netzwerk hinzu
  • Starten Sie die VM mit docker-machine start Computername
  • regeneriert Zertifikate mit docker-machine regenerate-certs Computername

überprüfe ob ok mit docker-machine ls

    
Michele 25.02.2016 09:35
quelle
4

OK, ich habe also einen besseren Weg gefunden, als einen Bridge-Netzwerkadapter zu verwenden. Ich habe es in der Boot2docker-Dokumentation unter Portweiterleitung gefunden.

Benutze einfach VBoxManage modifyvm default --natpf1 "my_web,tcp,,8080,,80" oder verwenden Sie die GUI von VirtualBox, um Ihre Portweiterleitung für den NAT-Adapter anzugeben.

Entfernen Sie dann die Option -p aus dem Befehl docker run und verwenden Sie stattdessen --net=host . Das ist statt

%Vor%

verwenden

%Vor%

Und voila! Ihr Webserver ist unter localhost: 8080 auf Ihrem Host oder DEINHOSTIP: 8080 an anderer Stelle in Ihrem LAN verfügbar.

Beachten Sie, dass die Verwendung von --net=host die Kommunikation zwischen Containern auf der VM beeinträchtigen kann. Da dies jedoch der einzige Container ist, den ich ausführen möchte, funktioniert er gut für mich.

    
chetstone 16.09.2015 18:25
quelle
1

Auf einem Computer mit Docker Toolbox für Mac löse ich das Problem wie folgt (mit dem Computer default ).

Vorbereitung

  1. Stoppen Sie die Maschine, wenn sie läuft:

    docker-machine stop default

VirtualBox-Setup

  1. Öffne VirtualBox, wähle den default Rechner, öffne Einstellungen ( Cmd-S ), gehe zu Netzwerk und wähle "Adapter 3".

  2. Aktivieren Sie "Netzwerkadapter aktivieren" (aktivieren).

  3. Setzen Sie "Attached to" auf "Bridged Adapter".
  4. Setzen Sie den Namen auf "en0: Ethernet" (oder was auch immer die primäre Netzwerkschnittstelle oder Ihr Mac ist).
  5. Geben Sie "Advanced" an und vergewissern Sie sich, dass "Cable Connected" aktiviert ist.
  6. Beachten Sie die "MAC-Adresse" von "Adapter 3" (wir werden es später verwenden).
  7. Drücken Sie "OK", um die Einstellungen zu speichern.

Docker-Setup

  1. Starten Sie jetzt im Terminal die Maschine:

    docker-machine start default

  2. Nur für den Fall, regenerieren Sie die Zertifikate:

    docker-machine regenerate-certs default

  3. Aktualisieren Sie die Umgebung:

    eval $(docker-machine env default)

An diesem Punkt sollte der Computer ausgeführt werden (mit der Standard-IP-Adresse 192.168.99.100, auf die nur vom Host-Mac aus zugegriffen werden kann). Wenn Sie jedoch auf die Docker-VM zugreifen ( docker-machine ssh default ) und ifconfig -a ausführen, sehen Sie, dass eine der Schnittstellen der VM ( eth0 in meinem Fall) eine IP im selben Netzwerk hat wie Ihr Mac (z. B. 192.168.0.102), auf die von anderen Geräten in Ihrem LAN zugegriffen werden kann.

Router-Setup

Nun müssen Sie als letzten Schritt sicherstellen, dass diese Adresse fest ist und nicht von Zeit zu Zeit vom DHCP Ihres Routers geändert wird. Dies kann sich von Router zu Router unterscheiden, das folgende gilt für meinen schnörkellosen TP-LINK Router, sollte aber leicht auf andere Marken und Modelle einstellbar sein.

  1. Öffnen Sie Ihre Router-Einstellungen und prüfen Sie zunächst, ob default in der DHCP-Client-Liste des Routers mit der MAC-Adresse aus Schritt 7 oben steht.

  2. Öffnen Sie "DHCP" & gt; "Adressreservierung" in den Router-Einstellungen, und fügen Sie die MAC-Adresse "Adapter 3" hinzu (Sie müssen möglicherweise die fehlenden Bindestriche einfügen) und Ihre gewünschte IP dort (z. B. 192.168.0.201).

  3. Jetzt fragt mich mein Router, ob ich ihn neu starten soll. Führen Sie nach dem Neustart docker-machine restart default für die Docker-VM aus, um die neue IP-Adresse abzurufen.

  4. Letzte Verifizierung: docker-machine ssh default , dann ifconfig -a , und suchen Sie Ihre neue IP-Adresse in der Ausgabe (diesmal war die Schnittstelle eth1 ).

Ergebnis

Vom Host-Mac aus ist der Rechner über zwei Adressen erreichbar (192.168.99.100 und 192.168.0.201); von anderen Geräten im LAN ist es als 192.168.0.201 erreichbar.

    
Sea Coast of Tibet 15.02.2017 17:49
quelle
0

Der Hauptanwendungsfall dieser Frage wäre der Zugriff auf die Anwendungen, die im Container von einem Host-Computer (Mac) oder anderen Maschinen im Host-Netzwerk (Mac-Netzwerk) laufen.

Sobald die Container-Anwendung wie folgt gestartet und verfügbar gemacht wurde

%Vor%

Dann finden Sie die Zuordnung zwischen dem Host (Mac) -Port mit Container-Port wie folgt

%Vor%

Greifen Sie jetzt als Host (Mac IP): 32771 von jedem Rechner in Ihrem Host-Netzwerk (Mac) auf die Container-Anwendung zu

    
Harish Kumar 29.12.2016 02:39
quelle