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.
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.
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