2015-02-06 23 views
7

Dopo un'attenta ricerca, test e manipolazione, sono stato in grado di trovare solo il collegamento di un contenitore Docker a una determinata interfaccia inoltrando da un IP /porta. Questo può essere ottenuto aggiungendo -p Host-IP:Host-Port:Container-Port a un comando docker run.Connessione di un contenitore Docker a un'interfaccia/dispositivo di rete invece di un indirizzo IP

Ho un'app che ascolta le trasmissioni UDP (255.255.255.255) e non sono stato in grado di configurare l'inoltro in modo tale che il mio contenitore riceva tali trasmissioni senza inoltrare tutto il traffico di rete sulla porta a cui tengo (no importa attraverso quale interfaccia entra), ovvero: -p Host-Port:Container-Port.

È possibile configurare il contenitore con --net=host e basta scrivere il mio codice per collegarlo a una determinata interfaccia, cosa che ho fatto e testato, ma che comunque va contro l'idea principale di un contenitore. L'obiettivo è di avere più contenitori della stessa app in ascolto su diverse interfacce di rete (come nei dispositivi, non negli indirizzi).

Qualche idea su come potrei fare questo?

EDIT # 1: Dopo aver riflettuto su questo un po 'di più, può essere possibile che la creazione del ponte sul interfaccia desiderata è sufficiente, ma non mi fido del sistema operativo per inviare i pacchetti broadcast su di esso. Resta sintonizzato mentre eseguo altri test.

EDIT # 2: I pacchetti vengono inviati su un ponte bene. Tuttavia, il bridge è configurato come il bridge predefinito Docker. Non sono stato in grado di capire come eseguire i contenitori su diversi ponti. Ho visto alcune note che puntano ad impostare la rete su --net=none e configurarla tu stesso attraverso le impostazioni del contenitore lxc.

+0

perché è il ponte non è abbastanza buono finestra mobile? –

+0

Non sono stato in grado di configurare il docker bridge in modo da poter specificare a quale interfaccia di rete collegarsi. Il che significa che non posso avere contenitori separati per interfaccia di rete. – tryexceptpass

+1

puoi pubblicare la tua soluzione? Ho bisogno di qualcosa di simile per eseguire un'istanza DHCP all'interno di un contenitore mobile –

risposta

-1

Per impostazione predefinita, il comando di esecuzione della finestra mobile pubblica le porte per tcp. tenta di specificare l'utilizzo di UDP:

docker run -p Host-Port:Container-Port/UDB ...

+1

Il problema non è l'inoltro delle porte, ma l'inoltro dei dati da un'interfaccia specifica. – tryexceptpass

+0

Quale interfaccia si desidera inoltrare? –

+1

In questo caso sto usando la parola "interfaccia" per indicare un dispositivo di rete. Se ho un sistema con doppia porta e voglio solo fornire un servizio su una delle reti, non ho trovato un modo per farlo. L'inoltro di dati da un particolare IP non è sufficiente nel caso in cui io stia utilizzando pacchetti broadcast o multicast. – tryexceptpass