2015-09-15 4 views
8

Ich versuche, mit Docker zu beginnen und die Ubiquiti video controller ausführen möchten. 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 kann ich auf einen Andock-Container zugreifen, der von einem anderen Host auf MacOSX ausgeführt wird?

Wie in boot2docker issue 160 vorgeschlagen, mithilfe der Virtualbox GUI konnte ich einen überbrückten Netzwerkadapter hinzufügen, aber nach dem Neustart der VM docker-machine kann nicht mehr mit der VM verbinden. docker env default hängt für eine lange Zeit, aber schließlich gibt einige Umgebungsvariablen zusammen mit der Nachricht Maximum number of retries (60) exceeded zurück. Wenn ich die Shell mit diesen Variablen einrichten und versuchen, docker ps auszuführen, erhalte 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:

docker0 Link encap:Ethernet HWaddr 02:42:86:44:17:1E 
      inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 
      UP BROADCAST MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

dummy0 Link encap:Ethernet HWaddr 96:9F:AA:B8:BB:46 
      BROADCAST NOARP MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

eth0  Link encap:Ethernet HWaddr 08:00:27:37:2C:75 
      inet addr:192.168.1.142 Bcast:192.168.1.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fe37:2c75/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:2996 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:76 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:278781 (272.2 KiB) TX bytes:6824 (6.6 KiB) 
      Interrupt:17 Base address:0xd060 

eth1  Link encap:Ethernet HWaddr 08:00:27:E8:38:7C 
      inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fee8:387c/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:767 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:495 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:122291 (119.4 KiB) TX bytes:116118 (113.3 KiB) 

eth2  Link encap:Ethernet HWaddr 08:00:27:A4:CF:12 
      inet addr:192.168.99.100 Bcast:192.168.99.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fea4:cf12/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:430 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:322 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:53351 (52.1 KiB) TX bytes:24000 (23.4 KiB) 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

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 belle. 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 Websites gefunden, die erklären, wie Sie auf den Container zugreifen müssen, indem Sie den Wert docker-machine ip default statt 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.

+0

haben Sie eine Lösung? – gnz

+1

@gnz Art von .. Siehe meine Antwort unten. Mehr Informationen [hier] (https://github.com/docker/machine/issues/1491) – chetstone

Antwort

4

OK, also habe ich einen besseren Weg gefunden, es zu versuchen, als einen Brückennetzadapter zu verwenden. Ich fand es in der boot2docker docs auf port forwarding.

Verwenden Sie einfach VBoxManage modifyvm default --natpf1 "my_web,tcp,,8080,,80" oder verwenden Sie die VirtualBox-GUI, 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 heißt, anstatt

docker run -d -p 8080:80 --name=web nginx 

Verwendung

docker run -d --net=host --name=web nginx 

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 den Containern auf der VM beeinträchtigen kann, aber da dies der einzige Container ist, den ich ausführen möchte, funktioniert er gut für mich.

+1

Jede Idee, wie dies zu erreichen mit dem neuesten Docker von Mac mit aus boot2docker? –

5

für mich Diese Arbeits

  • mit gestoppt VM eine 3. "Brücke" Netzwerk
  • starten Sie die VM mit Docker-Maschine Start Maschinenname
  • Regenerat Zert mit Docker-Maschine Regenerat-Zert hinzufügen Computername

überprüfen, ob ok mit docker-Maschine ls

0

Diese Frage ma in Anwendungsfall wäre es, die Anwendungen für den Zugriff auf in dem Behälter vom Host (Mac) Maschine oder anderen Maschinen im Host (Mac) Netzwerk

laufen Sobald die Container-Anwendung gestartet wurde und belichtet, wie unter

docker run -d -p 8080 <<image-name>> 

Dann, als die Zuordnung zwischen dem Host (Mac) Hafen mit Containerhafen findet unter

docker port <<container-name>> 
sample output : 8080/tcp -> 0.0.0.0:32771 

jetzt der Container-Anwendung als Host (Mac IP) zugreifen: 32771 von jedem Rechner in Ihrem Host (Mac) Netzwerk

1

Auf einer Maschine mit Docker Toolbox für Mac, löse ich das Problem wie folgt (mit der default Maschine).

Vorbereitung

  1. die Maschine anhalten, wenn es läuft:

    docker-machine stop default

VirtualBox-Setup

  1. Öffnen Sie VirtualBox, wählen Sie die default Maschine, öffnen Sie Einstellungen (Cmd-S), gehen Sie zu Netzwerk, und wählen Sie "Adapter 3".

  2. Überprüfen Sie "Netzwerkadapter aktivieren" (einschalten).

  3. Setzen Sie "An" an "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. nun im Terminal zurück, die Maschine starten:

    docker-machine start default

  2. Nur für den Fall, regeneriert die Zert:

    docker-machine regenerate-certs default

  3. Aktualisieren Sie die Umwelt:

    eval $(docker-machine env default)

An diesem Punkt sollte die Maschine (mit der Standard-IP-Adresse von 192.168.99.100, nur von dem Hosting-Mac) ausgeführt werden. Wenn Sie jedoch in den Docker ssh VM (docker-machine ssh default) und laufen ifconfig -a, sehen Sie, dass eine der Schnittstellen des VM (eth0 in meinem Fall) eine IP im gleichen Netzwerk wie Ihr Mac hat (zB 192.168.0.102), die ist von anderen Geräten in Ihrem LAN zugänglich.

Router-Setup

nun der letzte Schritt ist, diese Adresse, um sicherzustellen, ist fest und nicht von Zeit zu Zeit von Ihrem Router DHCP geändert. Dies kann von Router zu Router unterschiedlich ist, so gilt für meinen No-Frills-TP-LINK Router, sondern sollte auch auf andere Marken und Modelle leicht verstellbar sein.

  1. Routereinstellungen öffnen, und erste Überprüfung, dass default in dem DHCP-Clients Liste des Routers ist, mit der MAC-Adresse aus Schritt über 7.

  2. Öffnen Sie "DHCP"> "Adressreservierung" in den Routereinstellungen und fügen Sie die MAC-Adresse "Adapter 3" hinzu (möglicherweise müssen Sie die fehlenden Bindestriche einfügen), und Ihre gewünschte IP dort (zB 192.168.0.201) .

  3. Nun ist mein Router fragt mich, es neu zu starten. Führen Sie nach dem Neustart docker-machine restart default für die Docker-VM aus, um die neue IP-Adresse abzurufen.

  4. Schluss Überprüfung: docker-machine ssh default, dann ifconfig -a und Ihre neue IP-Adresse in der Ausgabe finden (diesmal die Schnittstelle war eth1).

Ergebnis

Von der Hosting-Mac der Maschine ist über zwei Adressen (192.168.99.100 und 192.168.0.201); Von anderen Geräten im LAN ist es als 192.168.0.201 erreichbar.

+0

Nur FYI, Sie können die 'default' in' docker-machine env default' ('default' ist, nun, die Standard-arg):' eval $ (docker-machine env) ' – nathanleclaire

+0

Sicher, aber falls Sie haben oder mehr als eine VM haben, ist es klarer, den Computernamen explizit anzugeben. Kann in der Praxis natürlich fallengelassen werden. –