Verbinden Sie den Docker-Container mit dem Host- und dem internen Bridge-Netzwerk

14

Ich versuche, einen Docker-Container als Router zwischen einem privaten ( --internal) Docker-Netzwerk und dem vordefinierten hostNetzwerk 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 bridgeZuweisung 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?

Hexaholic
quelle
@PunMum Leider nicht. Am Ende haben wir alle Container direkt mit dem Host-Netzwerk verbunden und die IPs in den Containern konfiguriert.
Hexaholic

Antworten:

2

Nach diesen Fragen und Antworten zu Github :

Das Host-Netzwerk ist etwas Besonderes. Sie müssen network_mode: host für den Dienst verwenden

030
quelle
Das network_modefunktioniert 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.
JV-Dev
2

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:

  • Stellen wir uns einen Container C1 vor. Hypothetisch wäre C1 mit dem Host-Netzwerk (--net = Host) und einem Docker-Bridge-Netzwerk Br1 (--net = Br1) verbunden.
  • Ein zweiter Container, sagen wir C2, ist mit Br1 verbunden.

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:

  • [C2, ..., CN] sind mit einer benutzerdefinierten Docker-Brücke Br1 verbunden (--net = Br1)
  • C1 ist mit dem Host-Netzwerk verbunden (--net = Host)
  • C1 legt einen Port frei, um vom Rest der Container aus zugänglich zu sein

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/ ).

JJFanFer
quelle