Esporre servizi Docker all’esterno

Nel precedente articolo abbiamo visto come è semplice installare Docker su Debian Jessie. Abbiamo altresì installato e avviato il nostro primo container.

Ora vogliamo usare Docker in modo più “intelligente” e utile. Supponiamo di aver installato un web server o di aver attivato un servizio da esporre all’esterno tramite connessione tcp o Internet. Qui le cose si complicano perché Docker non permette di esporre servizi esterni di default (out-of-box).

Docker essenzialmente crea un’interfaccia virtuale chiamata docker0 che affianca la più nota eth0.

Se digitiamo il classico comando ifconfig vedremmo qualcosa di molto simile.

ifconfig
Docker fa si chè le connessioni siano permesse solo tramite l’indirizzo IP dell’interfaccia virtuale docker0, che non è esposta.

Detto questo, ci sono almeno 3 metodi per esporre il servizio.

docker
Il primo è quello di abilitare il routing sulla VM, a mio parare più pericoloso.
Il secondo consiste nel fare il flush di iptables (ossia cancellare le regole) col comando:

iptables -F

Il terzo è quello di inserire due regole di FORWARD tramite iptables:

iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT

Ne consegue che possiamo rendere permanenti (ossia persistenti al riavvio del sistema operativo) queste regole inserendole nel file /etc/network/if-pre-up.d/iptables:

nano /etc/network/if-pre-up.d/iptables

Aggiungere le seguenti righe

*filter
# Espone docker all esterno
-A FORWARD -i docker0 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o docker0 -j ACCEPT

Poi rendere eseguibile il file.

chmod +x /etc/network/if-pre-up.d/iptables

cloud

Articolo precedente

Installare Docker su Debian Jessie
cloud

Articolo successivo

Installare Rancher server su Debian Jessie