2016-03-21 23 views
8

Sto provando a configurare un ambiente di sviluppo per il mio progetto.Usa rete host e reti aggiuntive nella finestra mobile componi

Ho un contenitore (ms1) che deve essere inserito nella propria rete ("servizi" nel mio caso) e un contenitore (apigateway) che dovrebbe accedere a tale rete mentre espone una porta http alla rete dell'host.

Idealmente il mio file composizione finestra mobile sarebbe simile a questa:

version: '2' 
services: 
    ms1: 
     expose: 
      - "13010" 
     networks: 
      services: 
       aliases: 
        - ms1 
    apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     network_mode: "host" 
networks: 
    services: 

finestra mobile-composizione non permette di utilizzare network_mode e reti allo stesso tempo.

Ho altre alternative?

Al momento sto usando questo:

apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     ports: 
      - "127.0.0.1:10000:13010" 

e poi apigateway contenitore in ascolto su 0.0.0.0:13010. Funziona ma è lento e si blocca se la connessione internet dell'host si interrompe.

Inoltre, ho intenzione di utilizzare vagabondo in futuro sulla finestra mobile, consente di risolvere in modo pulito?

+0

È sufficiente utilizzare un indirizzo IP di ms1 da apigateway? Vedi https: // StackOverflow.it/questions/27937185/assign-static-ip-to-docker-container come fare con la finestra mobile 1.10.1 –

+0

Sto cercando di fare lo stesso, ma per risolvere un problema diverso (forse). Nel mio caso ho creato una rete condivisa tra due servizi, ma per qualche ragione, uno dei servizi non era connesso a Internet (pensavo che la ragione non fosse che faceva parte della rete ospitante). Tuttavia, il problema era che non poteva risolvere gli URL perché non era in grado di raggiungere un DNS. Ho fatto un quickfix usando gli indirizzi IP ma lo guarderò bene per inoltrare la richiesta al DNS corretto. – omrsin

risposta

0

vorrei provare questo:

1/Trova la rete host docker network ls

2/Utilizzare questo file dockercompose

 services: 
      ms1: 
       ports: 
        - "13010" 
       networks: 
        - service 
      apigateway: 
       networks: 
        - front 
        - service 

     networks: 
      front: 
      service: 
       external: 
        name: "<ID of the network>" 
+0

Quando provo a creare una rete host usando il comando precedente ricevo questo errore 'Risposta errore dal demone: è consentita solo una istanza della rete" host " – disrvptor

+0

Quindi è possibile utilizzare quello già esistente. Ho aggiornato la mia risposta ma non sono in grado di testarla. – Plup

0

In finestra mobile 1.13 si dovrebbe essere in grado di creare un servizio per ponte tra le due reti. Sto usando qualcosa di simile per risolvere another problem e penso che questo potrebbe anche aiutare qui:

docker service create \ 
--name proxy \ 
--network proxy \ 
--publish mode=host,target=80,published=80 \ 
--publish mode=host,target=443,published=443 \ 
--constraint 'node.hostname == myproxynode' \ 
--replicas 1 \ 
letsnginx 
0

expose nella finestra mobile-comporre does not publish the port on the host. Dal momento che probabilmente non hai più bisogno di collegamenti di servizio (invece dovresti fare affidamento sulle reti Docker come fai già), l'opzione ha un valore limitato in generale e sembra non fornire alcun valore nel tuo scenario.

ho sospetto sei venuto a usarlo per errore e dopo aver capito che non sembra avere alcun effetto di per sé, inciampato sul fatto che utilizzando il driver di rete host avrebbe "farlo funzionare". Questo non ha nulla a che fare con la proprietà expose, attenzione. È solo che il driver di rete host consente ai processi contenuti di collegarsi direttamente all'interfaccia di rete host. Grazie a ciò, è possibile raggiungere il processo gateway API dall'esterno. È possibile rimuovere la proprietà expose e funzionerebbe ancora.

Se questo è l'unico motivo per cui hai scelto il driver di rete di accoglienza, vittima allora siete caduti della X-Y problem:

(tl; dr) Non si dovrebbe mai bisogno di utilizzare il driver di rete host in situazioni normali, il driver di rete bridge predefinito funziona correttamente. Quello che stai cercando è la proprietà ports, non expose. Questo imposta il port forwarding appropriato dietro le quinte.