L' --net=host
opzione viene utilizzata per far sembrare che i programmi all'interno del contenitore Docker siano in esecuzione sull'host stesso, dal punto di vista della rete. Consente al contenitore un accesso alla rete maggiore di quello che può normalmente ottenere.
Normalmente è necessario inoltrare le porte dalla macchina host a un contenitore, ma quando i contenitori condividono la rete dell'host, qualsiasi attività di rete avviene direttamente sulla macchina host, proprio come accadrebbe se il programma fosse in esecuzione localmente sull'host invece che all'interno di un contenitore.
Anche se questo significa che non devi più esporre le porte e mapparle alle porte del contenitore, significa che devi modificare i tuoi Dockerfile per regolare le porte su cui ogni contenitore ascolta, per evitare conflitti poiché non puoi avere due contenitori che operano sullo stesso porta ospite. Tuttavia, il vero motivo di questa opzione è l'esecuzione di app che richiedono un accesso alla rete difficile da inoltrare a un contenitore a livello di porta.
Ad esempio, se si desidera eseguire un server DHCP, è necessario essere in grado di ascoltare il traffico di trasmissione sulla rete ed estrarre l'indirizzo MAC dal pacchetto. Queste informazioni vengono perse durante il processo di port forwarding, quindi l'unico modo per eseguire un server DHCP all'interno di Docker è eseguire il contenitore come file --net=host
.
In generale, --net=host
è necessario solo quando si eseguono programmi con esigenze di rete molto specifiche e insolite.
Infine, dal punto di vista della sicurezza, i contenitori Docker possono ascoltare su molte porte, anche se pubblicizzano (espongono) solo una singola porta. Normalmente questo va bene poiché inoltri solo la singola porta prevista, tuttavia se la usi --net=host
, otterrai tutte le porte del contenitore in ascolto sull'host, anche quelle che non sono elencate nel Dockerfile. Ciò significa che dovrai controllare attentamente il contenitore (specialmente se non è tuo, ad esempio uno ufficiale fornito da un progetto software) per assicurarti di non esporre inavvertitamente servizi extra sulla macchina.
--net=host
all'interno di un Dockerfile?