È facile rendere un servizio ospitato da Docker accessibile solo ad altri contenitori sullo stesso host. Se tu:
- Imposta il server per l'associazione o l'ascolto su 0.0.0.0 o ::0 (tutti gli indirizzi);
- Crea una rete Docker non predefinita (Docker Compose lo farà automaticamente);
- Avvia il contenitore del server e tutti i contenitori client associati su quella rete Docker (Docker Compose lo farà per impostazione predefinita); e
- Non non imposta un
docker run -p
o Docker Componiports:
opzione
quindi i container client possono raggiungere il container del server utilizzando il suo nome container come nome host, ma i processi non Docker sull'host e su altri host non possono raggiungere il server.
Se il tuo host ha più interfacce di rete e l'associazione a una di queste renderebbe un servizio "privato", puoi fare la stessa cosa con docker run -p
. Se il tuo host ha un indirizzo IP pubblico 10.20.30.40/16 e anche un indirizzo IP privato 192.168.144.128/24, allora docker run -p 192.168.144.128:6379:6379
lo renderà disponibile alla rete privata (e ad altri contenitori Docker come sopra) ma non alla rete pubblica. (Il server stesso, all'interno del contenitore, deve ancora eseguire il binding a 0.0.0.0.)
Se altrimenti hai bisogno che il server sia visibile al di fuori dell'host, ma solo per alcuni indirizzi IP, penso che tu sia ridotto a iptables
magia che non è nativa di Docker.