Łatwo jest sprawić, by usługa hostowana przez Docker była dostępna tylko dla innych kontenerów na tym samym hoście. Jeśli:
- Ustaw serwer do łączenia się lub nasłuchiwania na 0.0.0.0 lub ::0 (wszystkie adresy);
- Utwórz inną niż domyślną sieć Docker (Docker Compose zrobi to automatycznie);
- Uruchom kontener serwera i wszystkie powiązane kontenery klienta w tej sieci Docker (Docker Compose zrobi to domyślnie); i
- Nie nie ustaw
docker run -p
lub Docker Composeports:
opcja
wtedy kontenery klienta mogą dotrzeć do kontenera serwera, używając jego nazwy kontenera jako nazwy hosta, ale procesy inne niż Docker na hoście i innych hostach nie mogą dotrzeć do serwera.
Jeśli twój host ma wiele interfejsów sieciowych i powiązanie z jednym z nich uczyniłoby usługę „prywatną”, możesz zrobić to samo za pomocą docker run -p
. Jeśli Twój host ma publiczny adres IP 10.20.30.40/16, a także prywatny adres IP 192.168.144.128/24, to docker run -p 192.168.144.128:6379:6379
udostępni ją w sieci prywatnej (i innych kontenerach Dockera jak powyżej), ale nie w sieci publicznej. (Sam serwer wewnątrz kontenera nadal musi być powiązany z 0.0.0.0.)
Jeśli w inny sposób chcesz, aby serwer był widoczny poza hostem, ale tylko dla niektórych adresów IP, myślę, że sprowadzasz się do iptables
magia, która nie jest natywna dla Dockera.