Es ist einfach, einen von Docker gehosteten Dienst nur für andere Container auf demselben Host zugänglich zu machen. Wenn Sie:
- Stellen Sie den Server so ein, dass er an 0.0.0.0 oder ::0 (alle Adressen) bindet oder lauscht;
- Erstellen Sie ein nicht standardmäßiges Docker-Netzwerk (Docker Compose wird dies automatisch tun);
- Starten Sie den Server-Container und alle zugehörigen Client-Container in diesem Docker-Netzwerk (Docker Compose wird dies standardmäßig tun); und
- Tun Sie nicht Setzen Sie einen
docker run -p
oder Docker Composeports:
Möglichkeit
dann können die Client-Container den Server-Container mit seinem Containernamen als Hostnamen erreichen, aber Nicht-Docker-Prozesse auf dem Host und andere Hosts können den Server nicht erreichen.
Wenn Ihr Host über mehrere Netzwerkschnittstellen verfügt und die Bindung an eine davon einen Dienst „privat“ machen würde, können Sie dasselbe mit docker run -p
tun . Wenn Ihr Host die öffentliche IP-Adresse 10.20.30.40/16 und auch die private IP-Adresse 192.168.144.128/24 hat, dann docker run -p 192.168.144.128:6379:6379
stellt es dem privaten Netzwerk (und anderen Docker-Containern wie oben) zur Verfügung, aber nicht dem öffentlichen Netzwerk. (Der Server selbst innerhalb des Containers muss sich immer noch an 0.0.0.0 binden.)
Wenn Sie ansonsten benötigen, dass der Server außerhalb des Hosts sichtbar ist, aber nur für einige IP-Adressen, sind Sie meiner Meinung nach auf iptables
angewiesen Magie, die Docker nicht eigen ist.