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:
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.
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
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.
Auf einem Computer mit Docker Toolbox für Mac löse ich das Problem wie folgt (mit dem Computer default
).
Vorbereitung
Stoppen Sie die Maschine, wenn sie läuft:
docker-machine stop default
VirtualBox-Setup
Öffne VirtualBox, wähle den default
Rechner, öffne Einstellungen ( Cmd-S
), gehe zu Netzwerk und wähle "Adapter 3".
Aktivieren Sie "Netzwerkadapter aktivieren" (aktivieren).
Docker-Setup
Starten Sie jetzt im Terminal die Maschine:
docker-machine start default
Nur für den Fall, regenerieren Sie die Zertifikate:
docker-machine regenerate-certs default
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.
Ö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.
Ö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).
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.
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.
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
Tags und Links macos docker virtualbox docker-machine