Ich versuche, einen Docker-Container als Router zwischen einem privaten ( --internal
) Docker-Netzwerk und dem vordefinierten host
Netzwerk auszuführen . Dies bedeutet, dass der Container über zwei Netzwerkschnittstellen verfügen muss: Eine "externe" Schnittstelle, die auf alle Host-IP-Adressen zugreifen kann, und eine "interne" Schnittstelle, die als Gateway für die Container im internen Docker-Netzwerk fungiert
Der Router-Container selbst leitet dann den NAT-Netzwerkverkehr von / zu Containern.
Ich habe keine Möglichkeit gefunden, Docker so zu konfigurieren, dass der Container mit diesen beiden Schnittstellen ausgeführt wird. Das nächste, was ich bekommen könnte, ist die bridge
Zuweisung von zwei Schnittstellen, was nicht genau das ist, was ich brauche.
Der Versuch, eine Verbindung manuell herzustellen, führt zu einem Fehler:
# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network
Kann mir jemand zeigen, wie ich das erreichen kann, am besten sogar mit Docker Compose?
quelle
Antworten:
Nach diesen Fragen und Antworten zu Github :
quelle
network_mode
funktioniert nicht, wenn Sie etwas benötigen, das mit einem internen Netzwerk und dem Host-Netzwerk verbunden ist. Es scheint verrückt, dass wir keine klare Lösung für dieses Problem finden können.Docker erlaubt nicht, einen Container gleichzeitig mit dem Host-Netzwerk und einem anderen Docker-Bridge-Netzwerk zu verbinden. Ich werde versuchen, den Grund anhand eines Beispiels zu veranschaulichen:
Mit dem obigen Setup schätze ich, dass das Host-Netzwerk von C2 aus sichtbar ist, und ich nehme an, dass dies der Grund ist, warum Docker automatisch verhindert, dass wir das Host-Netzwerk unbeabsichtigt nicht vom Host angegebenen Containern aussetzen.
Abgesehen davon, wenn wir eine Reihe von Containern haben und alle miteinander verbunden werden sollen, wobei nur ein einziger Container Zugriff auf das Host-Netzwerk hat, wäre mein Ansatz:
EDIT: Wir müssten die iptables-Richtlinien noch so anpassen, dass C1 vom Rest der Container aus erreichbar ist (siehe https://docs.docker.com/network/iptables/ ).
quelle