Cloud

Docker Networking: Bridge, Host, Overlay — Guida Pratica per Sysadmin (2026)

Docker Networking: Bridge, Host, Overlay — Guida Pratica per Sysadmin (2026)

Microservizi Docker in produzione, nessuno riusciva a capire perché due container non si parlavano. Stesso host, stessa macchina. Il problema: due bridge network separati, DNS interno non configurato. 30 minuti per trovarlo, 2 righe per risolverlo. Questo scenario, fin troppo comune, evidenzia quanto sia critico comprendere le basi del networking Docker per chiunque gestisca infrastrutture IT moderne. Una configurazione di rete errata può trasformare un’architettura robusta in un incubo di troubleshooting, impattando SLA e tempi di reazione. Con l’adozione crescente dei container, la capacità di progettare, implementare e debuggare reti Docker efficienti è diventata una skill imprescindibile per ogni sysadmin e DevOps engineer. Il 70% delle interruzioni di servizio in ambienti containerizzati è legato a problemi di configurazione di rete o risorse (Cloud Native Computing Foundation, 2025). Questa guida ti fornirà le basi e le configurazioni pratiche per padroneggiare i principali driver di rete Docker, garantendo che i tuoi container comunichino in modo sicuro ed efficiente.

Prerequisiti / Ambiente di test

Per seguire questa guida, avrai bisogno di un ambiente Linux con Docker installato e funzionante. Le versioni più recenti di Docker Engine (24.x o superiore) sono raccomandate. Per le sezioni relative all’overlay network, sarà necessario un cluster Docker Swarm minimo di due nodi.

I driver di rete Docker: bridge, host, overlay, macvlan, none

Docker offre diversi driver di rete, ognuno progettato per specifici casi d’uso e requisiti architetturali. Comprendere le differenze tra questi driver è fondamentale per scegliere la soluzione più adatta al tuo ambiente. Ogni driver definisce come i container si connettono tra loro e al mondo esterno.

  • Bridge: Il driver predefinito. Crea una rete interna privata per i container su un singolo host.
  • Host: Rimuove l’isolamento di rete tra il container e l’host, permettendo al container di utilizzare direttamente lo stack di rete dell’host.
  • Overlay: Abilita la comunicazione tra container che risiedono su host Docker diversi, essenziale per i cluster Swarm.
  • Macvlan: Assegna un indirizzo MAC e IP dalla rete fisica direttamente al container, facendolo apparire come un dispositivo fisico sulla rete.
  • None: Disabilita completamente il networking per il container, utile per container che non necessitano di connettività di rete.

Per visualizzare le reti disponibili sul tuo sistema Docker, puoi usare il comando:

docker network ls

Questo ti mostrerà le reti predefinite (bridge, host, none) e qualsiasi rete personalizzata che hai creato.

Bridge network: il default e i suoi limiti

Quando avvii un container senza specificare una rete, Docker lo connette automaticamente alla rete bridge predefinita. Questa rete crea un ponte virtuale (docker0 su Linux) che permette ai container sullo stesso host di comunicare tra loro utilizzando i loro indirizzi IP interni. Tuttavia, questa rete ha delle limitazioni significative:

  1. Isolamento limitato: Tutti i container sulla rete bridge predefinita possono raggiungersi. Non c’è isolamento logico tra applicazioni diverse.
  2. Risoluzione DNS: I container possono comunicare tramite IP, ma la risoluzione DNS per nome tra container non è automatica sulla rete bridge predefinita.
  3. Configurazione statica: Non puoi configurare parametri specifici come subnet o gateway.

Per applicazioni semplici o test veloci, la rete bridge predefinita può essere sufficiente. Ma per ambienti di produzione con microservizi, è consigliabile passare a user-defined bridge networks.

User-defined bridge: isolamento e DNS automatico

Le user-defined bridge networks offrono un isolamento di rete superiore e funzionalità di risoluzione DNS automatica tra i container collegati. Ogni rete personalizzata crea un bridge virtuale separato, garantendo che solo i container esplicitamente collegati a quella rete possano comunicare tra loro. Questo migliora la sicurezza e la gestibilità dell’architettura.

Per creare una rete bridge personalizzata:

docker network create --driver bridge --subnet 172.20.0.0/16 mynet

Questo comando crea una rete chiamata mynet con la subnet specificata. Ora puoi avviare container e collegarli a questa rete:

docker run -d --net mynet --name webserver nginx
docker run -d --net mynet --name appserver myapp:latest

I container webserver e appserver ora possono comunicare tra loro utilizzando i loro nomi come hostname, grazie al DNS interno fornito da Docker. Per ispezionare la rete e vedere i container collegati:

docker network inspect mynet

Puoi anche assegnare un IP specifico a un container, anche se è una pratica meno comune e spesso sconsigliata a meno di esigenze specifiche, visto che Docker gestisce il DHCP all’interno della rete:

docker run -d --net mynet --ip 172.20.0.10 --name fixedip_nginx nginx

Host network: quando e perché usarla

Il driver host rimuove l’isolamento di rete tra il container e l’host. Il container condivide lo stack di rete dell’host, il che significa che non ha un proprio indirizzo IP separato. Le porte esposte dal container saranno direttamente mappate alle stesse porte sull’host. Questo può migliorare le prestazioni rimuovendo lo strato di NAT, ma introduce anche rischi di sicurezza e collisioni di porte.

Casi d’uso:

  • Applicazioni ad alte prestazioni: Se ogni millisecondo conta e la latenza del network stack virtuale è un problema.
  • Monitoring: Strumenti di monitoring che necessitano di accedere a tutte le interfacce di rete dell’host.
  • Servizi di rete specifici: Container che devono interagire direttamente con l’hardware di rete o protocolli low-level.

Per avviare un container in modalità host network:

docker run -d --net host --name myhostapp myapp:latest

È fondamentale essere consapevoli dei rischi: il container ha accesso a tutte le interfacce di rete dell’host, inclusi i servizi in ascolto su localhost. Questo driver dovrebbe essere usato con cautela e solo quando strettamente necessario.

Overlay network: comunicazione multi-host con Swarm

Le overlay network sono la spina dorsale della comunicazione tra container distribuiti su più host Docker. Sono essenziali per le architetture a microservizi che necessitano di scalabilità orizzontale e orchestrazione, come quelle gestite da Docker Swarm. Un cluster Swarm utilizza un key-value store interno (basato su Raft) per mantenere lo stato della rete e dei servizi.

Per creare un’overlay network (richiede un cluster Swarm inizializzato):

  1. Inizializza Swarm (se non già fatto):
docker swarm init --advertise-addr <IP_MANAGER>
  1. Crea la rete overlay:
docker network create --driver overlay --attachable myoverlay

Il flag --attachable permette ai container standalone (non parte di un servizio Swarm) di connettersi a questa rete.

  1. Avvia un servizio Swarm sulla rete:
docker service create --replicas 3 --network myoverlay --name myweb nginx

I container del servizio myweb, anche se distribuiti su host diversi del cluster Swarm, potranno comunicare tra loro e con altri container sulla rete myoverlay utilizzando i loro nomi di servizio o nomi di container (se sono stati creati con --attachable).

Macvlan: container con IP sulla rete fisica

Il driver macvlan consente di assegnare un indirizzo MAC unico a un container, facendolo apparire come un dispositivo fisico sulla rete. Questo significa che il container ottiene un indirizzo IP direttamente dalla rete fisica, come se fosse una macchina virtuale o un dispositivo hardware. È particolarmente utile in scenari che richiedono:

  • Integrazione con reti legacy: Applicazioni che necessitano di essere sulla stessa subnet di dispositivi fisici o VM preesistenti.
  • Isolamento IP: Quando un container deve avere un IP pubblico o un IP su una VLAN specifica.
  • IoT/Networking specializzato: Container che devono interagire con dispositivi di rete a basso livello o protocolli specifici.

Per creare una rete macvlan:

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 mymacvlan

Sostituisci eth0 con l’interfaccia di rete fisica del tuo host. Ora puoi avviare un container che ottiene un IP dalla tua rete fisica:

docker run -d --net mymacvlan --name mymacvlan_nginx nginx

Attenzione: la configurazione macvlan può essere complessa e richiede una buona conoscenza della rete fisica. Assicurati che il tuo switch supporti la modalità promiscuous o che tu abbia configurato le VLAN correttamente, se applicabile.

Docker Compose networking: esempi pratici

Docker Compose semplifica la gestione di applicazioni multi-container definendo la loro configurazione (inclusa la rete) in un file docker-compose.yml. Per impostazione predefinita, Compose crea una user-defined bridge network per tutti i servizi definiti nel file, permettendo loro di comunicare per nome.

Esempio di docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    networks:
      - app_net

  app:
    image: myapp:latest
    networks:
      - app_net

networks:
  app_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.21.0.0/24

In questo esempio, web e app sono nella stessa app_net e possono comunicare tra loro. Se ometti la sezione networks a livello di servizio, Compose li connetterà alla rete default creata automaticamente per il progetto.

Leggi anche: Zabbix 7 Installazione Ubuntu: Guida Completa e Configurazione (2026)

Debugging reti Docker: strumenti e comandi

Il debugging di problemi di rete Docker è una skill fondamentale. Ecco alcuni comandi utili:

  • Ispezionare una rete: docker network inspect fornisce dettagli completi sulla rete, inclusi i container collegati, subnet, gateway e impostazioni DNS.
  • Lista delle reti: docker network ls mostra tutte le reti Docker presenti.
  • Testare la connettività tra container: Utilizza docker exec per entrare in un container e usare strumenti come ping o curl per testare la connettività verso altri container o servizi esterni.
docker exec webserver ping appserver
  • Controllare i log: I log dei container possono spesso rivelare errori di connessione o timeout.
  • Firewall: Assicurati che i firewall sull’host (come ufw o firewalld) non stiano bloccando il traffico tra i container o verso le porte esposte.

Un errore comune è dimenticare che i container su bridge network diverse non possono comunicare tra loro senza routing esplicito o l’uso di overlay network. Quando un servizio non risponde, la prima cosa da fare è verificare la configurazione di rete del container e dell’host.

Errori comuni e troubleshooting

  1. Container non si parlano: Spesso causato da container su reti bridge diverse. Verifica con docker network inspect e assicurati che i servizi pertinenti siano sulla stessa user-defined bridge network, o considera un’overlay network per ambienti multi-host.
  2. Porte non accessibili dall’esterno: Potrebbe essere un problema di mappatura delle porte (-p host_port:container_port) o un firewall sull’host che blocca il traffico. Assicurati che la porta sull’host sia aperta e non in conflitto.
  3. Risoluzione DNS fallita: Se i container non riescono a risolversi per nome, verifica che siano sulla stessa user-defined bridge network o che il tuo servizio DNS esterno sia configurato correttamente se stai usando un driver diverso. docker network inspect mostrerà i DNS server configurati per la rete.
  4. Conflitto di indirizzi IP: Se crei reti con subnet che si sovrappongono alla tua rete fisica o ad altre reti Docker, potresti avere problemi di routing. Scegli subnet non utilizzate.

Secondo un’indagine del 2024, il 40% degli incidenti legati a Docker in produzione sono riconducibili a configurazioni di rete errate o insufficienti (Container Security Report, 2024).

FAQ — Domande Frequenti

Cos’è la rete docker0?

docker0 è l’interfaccia bridge virtuale creata da Docker quando installato, che funge da punto di connessione per la rete bridge predefinita. Tutti i container che non specificano una rete si collegano a docker0 e ottengono un IP dal suo range. È gestita automaticamente da Docker e non dovrebbe essere modificata manualmente.

Quando dovrei usare una user-defined bridge network invece di quella predefinita?

Dovresti usare una user-defined bridge network per la maggior parte delle tue applicazioni in produzione. Offre un migliore isolamento tra i container, una risoluzione DNS automatica per nome di container e una maggiore flessibilità nella configurazione della subnet. Questo crea un ambiente più sicuro e gestibile per i tuoi microservizi.

Qual è la differenza tra host network e bridge network?

La bridge network crea un isolamento di rete tra il container e l’host, assegnando al container un IP interno e utilizzando il NAT per la comunicazione esterna. La host network, invece, rimuove questo isolamento, permettendo al container di utilizzare direttamente l’interfaccia e lo stack di rete dell’host. La host network è più performante ma meno sicura.

Posso collegare un container a più reti?

Sì, un container può essere collegato a più reti contemporaneamente. Questo può essere utile per scenari complessi in cui un container deve comunicare con servizi su reti diverse, ad esempio un container che espone un’API su una rete pubblica e comunica con un database su una rete privata e isolata. Puoi farlo specificando più flag --net o configurando più reti in Docker Compose.

Conclusioni con takeaway operativi

La comprensione e la corretta configurazione del networking Docker sono pilastri fondamentali per la stabilità e la sicurezza delle tue applicazioni containerizzate. Dalla semplicità del bridge network predefinito alla complessità strategica dell’overlay per i cluster Swarm, ogni driver ha un ruolo specifico. Adottare user-defined bridge networks per l’isolamento e la risoluzione DNS interna è una best practice irrinunciabile per ambienti di produzione. Ricorda sempre di ispezionare le tue reti (docker network inspect) e di testare la connettività per prevenire e risolvere rapidamente i problemi. Investire tempo nella padronanza di queste configurazioni ti farà risparmiare ore di debugging e garantirà la resilienza dei tuoi sistemi.

Aggiornato: giugno 2026

Leggi anche: Linux Server Hardening: Checklist 15 Punti per la Produzione (2026)

Leggi anche: Ansible Playbook Provisioning Server: Checklist 12 Task Automatizzati (2026)

Leggi anche: Zabbix 7 Installazione Ubuntu: Guida Completa e Configurazione (2026)

Condividi questo articolo:

Scritto da

Rosario Giordano

Rosario Giordano è System Administrator e consulente IT specializzato in cybersecurity e cloud, con oltre 20 anni di esperienza nella gestione di infrastrutture Linux enterprise. Le sue aree di competenza includono hardening di SSH, piattaforme Kubernetes, database PostgreSQL, ambient i virtualizzati VMware e Proxmox, nonché la conformità ai framework di sicurezza NIS2 e ISO 27001.