Dando a un contenitore docker un indirizzo IP instradabile

Sto eseguendo questo su Ubuntu 14.04 e ho impostato docker0 su un IP statico che viene poi instradato dal IP pubblico attraverso il firewall. Sto cercando di configurare la mia API di back-end per l’esecuzione in un contenitore docker e sono confuso da un paio di cose.

1.) Come dovrei mappare l’ip di docker0 del contenitore in modo tale che docker0 possa sapere di inviare i pacchetti in entrata al contenitore (se ansible dynamicmente).

2.) Se non è già stato fatto in questo modo, come posso fare in modo che non debba impostarlo ogni volta che eseguo una nuova corsa di quel contenitore docker?

Grazie in anticipo!

    Presumo che si desideri assegnare un IP al contenitore docker al di fuori della finestra mobile.

    Innanzitutto, crea un nuovo IP e assegnalo all’interfaccia del tuo host (assumiamo che la tua interfaccia sia chiamata eth0.

     $> ip addr add 10.0.0.99/8 dev eth0 

    Ora, quando si accende il contenitore, specificare tale indirizzo e collegarlo al contenitore docker:

     $> docker run -i -t --rm -p 10.0.0.99:80:8080 base 

    L’argomento -p farà sì che la finestra mobile crei una regola NAT iptables che eseguirà tutto il traffico corrispondente alla destinazione 10.0.0.99:80 al contenitore docker sulla porta 8080.

    Se è necessario automatizzare il processo e ridimensionarlo, consultare questa risorsa: https://github.com/jpetazzo/pipework

    La documentazione della finestra mobile è un buon inizio: https://docker.github.io/engine/userguide/networking/

    Recentemente ho avuto lo stesso problema e l’ho risolto usando i Network Containers :

    • Avvia il mio contenitore ‘servizio’ che voglio essere disponibile sull’IP pubblico
    • Creare un nuovo contenitore “di rete” collegato al contenitore del servizio e instradare le porte esposte dal contenitore del servizio. Questo contenitore avrà un’interfaccia di rete aggiuntiva collegata all’host in modo che possa acquisire un IP da DHCP.
    • Creare un bridge di rete dall’host Docker al container usando jpetazzo’s Pipework ( https://github.com/jpetazzo/pipework )
    • Il contenitore di rete acquisisce un indirizzo da DHCP.

    Da questo punto il contenitore di rete è disponibile sulla rete e indirizza le porte al contenitore di servizi. Il vantaggio principale è che il contenitore ‘servizio’ non deve conoscere l’IP pubblico, il DHCP, ecc. In questo modo ogni contenitore in esecuzione può essere reso pubblico sulla rete.

    Per comodità, ho creato uno script che fa tutto questo in una volta. Rendere disponibile un contenitore funzionante su un IP pubblico è semplice come:

     create-network-container.sh webserver ens32 

    In questo caso è necessario disporre di un contenitore in esecuzione chiamato “server web” e un’interfaccia di rete sull’host “ens32”. L’interfaccia è necessaria per creare il bridge nel contenitore di rete.

    Lo script, informazioni più dettagliate ed esempi sono disponibili su: https://github.com/jeroenpeeters/docker-network-containers