2015-09-15 8 views
8

Sto provando ad iniziare con la finestra mobile e voglio eseguire il Ubiquiti video controller. Ho installato Docker Toolbox e sono riuscito a far funzionare il contenitore sul mio host Yosemite e posso accedervi sullo stesso mac andando verso l'IP restituito da docker-machine ip default. Ma voglio accedervi su altre macchine sulla rete e configurare eventualmente il port forwarding sul mio router di casa in modo che possa accedervi al di fuori della mia rete domestica.Come accedere a un contenitore finestra mobile in esecuzione su MacOSX da un altro host?

Come suggerito in boot2docker issue 160, utilizzando la GUI di Virtualbox, sono riuscito ad aggiungere una scheda di rete a ponte, ma dopo il riavvio la VM docker-machine non può più connettersi con la VM. docker env default si blocca per un lungo periodo ma alla fine restituisce alcune variabili di ambiente insieme al messaggio Maximum number of retries (60) exceeded. Quando imposto la shell con queste variabili e provo a eseguire docker ps, ho ricevuto l'errore: 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.

Ho il sospetto che la finestra mobile abbia alcune ipotesi sulla configurazione di rete nella VM e che le metto a tacere.

docker-machine ssh ifconfig -a restituisce il seguente:

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 sembra essere sempre un indirizzo DHCP ragionevole dal mio router.

Non sono sicuro se questo sia l'approccio giusto o se abbaia dall'albero sbagliato. Se riesco a far funzionare la scheda di rete a ponte sulla VM, non so come convincere il mio contenitore docker a usarlo. Ho provato a cercare in alto e in basso su internet. Ho trovato decine di siti che spiegano come è necessario accedere al contenitore utilizzando il valore di docker-machine ip default anziché localhost ma nulla per spiegare come accedere da un host diverso. Forse ho bisogno di migliorare le mie capacità di googling.

+0

hai trovato una soluzione? – gnz

+1

@gnz Ordina per .. Vedere la mia risposta qui sotto. Maggiori informazioni [qui] (https://github.com/docker/machine/issues/1491) – chetstone

risposta

4

OK, quindi ho trovato un modo migliore per farlo rispetto al tentativo di utilizzare una scheda di rete bridging. L'ho trovato nei documenti boot2docker su port forwarding.

Basta usare VBoxManage modifyvm default --natpf1 "my_web,tcp,,8080,,80" o utilizzare la GUI di VirtualBox per specificare il port forwarding per l'adattatore NAT.

Quindi, rimuovere l'opzione -p dal comando di esecuzione della finestra mobile e utilizzare invece --net=host. Cioè invece di

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

uso

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

E voilà! Il tuo server web è disponibile su localhost: 8080 sul tuo host o YOURHOSTIP: 8080 altrove sulla tua LAN.

Si noti che l'utilizzo di --net=host può compromettere la comunicazione tra i contenitori sul VM, ma poiché questo è l'unico contenitore che ho intenzione di eseguire, funziona perfettamente per me.

+1

Qualche idea su come ottenere questo risultato con l'ultimo Docker di Mac senza boot2docker? –

5

Questo lavoro per me

  • con fermato VM aggiungere una terza rete di "ponte"
  • avviare la macchina virtuale con finestra mobile-START nome-macchina
  • certs Ricrea la finestra mobile-macchina Rigenerare-certs

controllo nome della macchina, se ok con finestra mobile macchina ls

0

Questa domanda ma in uso caso sarebbe per accedere alle applicazioni in esecuzione nel contenitore dalla macchina host o altre macchine (Mac) nell'ospite rete (Mac)

volta che l'applicazione contenitore è stato avviato ed esposto come sotto

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

poi trovare il mapping tra la porta host (Mac) con porta container, come di seguito

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

ora accedere l'applicazione contenitore come host (Mac IP): 32771 da qualsiasi computer del host (Mac) di rete

1

Su una macchina con Docker Toolbox per Mac, sto risolvendo il problema nel modo seguente (utilizzando la macchina default).

Preparazione

  1. Fermare la macchina se è in esecuzione:

    docker-machine stop default

    Setup

VirtualBox

    012.351.641.061.
  1. Aprire VirtualBox, selezionare la macchina default, aprire Impostazioni (Cmd-S), andare su Rete e selezionare "Adattatore 3".

  2. Selezionare "Abilita scheda di rete" (accenderlo).

  3. Impostare "Collegato a" su "Adattatore a ponte".
  4. Imposta il nome su "en0: Ethernet" (o qualsiasi altra sia l'interfaccia di rete principale o il tuo Mac).
  5. Scoprire "Avanzate" e accertarsi che "Cavo collegato" sia selezionato.
  6. Nota "Indirizzo MAC" di "Adattatore 3" (lo useremo in seguito).
  7. Premere "OK" per salvare le impostazioni.

Setup Docker

  1. Ora, tornando nel Terminal, avviare la macchina:

    docker-machine start default

  2. Solo nel caso, rigenerare la certs:

    docker-machine regenerate-certs default

  3. aggiornare l'ambiente:

    eval $(docker-machine env default)

A questo punto, la macchina deve essere in esecuzione (con l'indirizzo IP di default del 192.168.99.100, accessibile solo dal Mac hosting). Tuttavia, se si esegue l'ssh nella finestra mobile VM (docker-machine ssh default) ed eseguito ifconfig -a, si noterà che una delle interfacce della VM (eth0 nel mio caso) ha un IP nella stessa rete del Mac (ad esempio 192.168.0.102), che è accessibile da altri dispositivi sulla tua LAN.

installazione del router

Ora, l'ultimo passo è quello di assicurarsi che questo indirizzo è fisso, e non è cambiato di volta in volta dal DHCP del router. Questo può variare da router a router, quanto segue vale per il mio router TP-LINK senza fronzoli, ma dovrebbe essere facilmente regolabile per altre marche e modelli.

  1. Aprire le impostazioni del router, e il primo controllo che default è nella lista client DHCP del router, con l'indirizzo MAC a partire dal punto 7.

  2. Aprire "DHCP"> "Prenotazione indirizzo" nelle impostazioni del router e aggiungere l'indirizzo MAC "Adapter 3" (potrebbe essere necessario inserire i trattini mancanti) e l'IP desiderato lì (ad esempio 192.168.0.201) .

  3. Ora il mio router mi chiede di riavviarlo. Dopo il riavvio, eseguire docker-machine restart default per la macchina virtuale Docker per raccogliere il suo nuovo indirizzo IP.

  4. Verifica finale: docker-machine ssh default, quindi ifconfig -a e trovare il nuovo indirizzo IP nell'output (questa volta l'interfaccia era eth1).

Risultato

Dal ospitare Mac la macchina è accessibile tramite due indirizzi (192.168.99.100 e 192.168.0.201); da altri dispositivi nella LAN è accessibile come 192.168.0.201.

+0

Solo FYI, è possibile rilasciare il 'default' in 'env docker-machine default' (' default' è, beh, l'arg default): 'eval $ (finestra mobile-machine)' – nathanleclaire

+0

Certo, ma nel caso si abbia , o potrebbe avere, più di una VM, è più chiaro specificare esplicitamente il nome della macchina. Può essere lasciato cadere in pratica, ovviamente. –