Auf einem Debian-Stretch-Host (verbunden mit einem physischen LAN) habe ich eine neue Docker-Installation (v18.09) mit einem Datenbankcontainer (dem Host zugeordneter Port) und führe KVM / libvirt mit einigen Debian-Stretch-VMs aus. Ich kann über das LAN auf den Docker-Container und die VMs zugreifen (abhängig von der Konfiguration über den SSH-Tunnel oder direkt), habe jedoch Probleme, über die VMs auf den Docker-Container zuzugreifen.
# brctl show
bridge name bridge id STP enabled interfaces
br-f9f3ccd64037 8000.0242b3ebe3a0 no
docker0 8000.024241f39b89 no veth35454ac
virbr0 8000.525400566522 yes virbr0-nic
Nachdem ich tagelang gelesen hatte, fand ich in diesem Beitrag eine sehr überzeugende Lösung Docker und KVM mit einer Brücke ( Original ), die ich nicht zur Arbeit brachte. Die Lösung schlägt vor, Docker mit einem einzeiligen Konfigurationscode daemon.json zu initiieren, um die KVM-Standardbrücke zu verwenden. Wie schön wäre das! Gibt es Hoffnung?
Ich habe zwei verschiedene Konfigurationen für die Vernetzung zwischen den KVM-VMs ausprobiert. In beiden Fällen ist die Kommunikation zwischen den VMs und der LAN + Router + Cloud einwandfrei, aber ich weiß einfach nicht, wie ich über den Zaun kommen soll - zum grüneren Gras ... :)
Conf 1 - KVM-Standardbrücke mit NAT: Ich kann ssh zum Debian-Host und auf den Docker-Container-Port zugreifen, aber gibt es ein Setup mit einer direkten Route?
Conf 2 - Macvtap-Adapter im Bridge-Modus zum LAN: Ich kann die Host-LAN-IP nicht von der VM aus anpingen, obwohl beide mit demselben Router verbunden sind. Die Antwort von der VM selbst lautet Destination Host Unreachable
. Irgendwelche Gedanken warum?
Wäre es besser, den Docker-Daemon in einer separaten VM auszuführen, als direkt auf dem Debian-Host? Auf diese Weise können sowohl der Container als auch die VM auf die KVM-Standardbrücke zugreifen. Aber ich fand es etwas seltsam, Docker in einer VM auf einem KVM-Host auszuführen.
Jede klare Anleitung wäre dankbar!
Übrigens ist die Bridge br-f9f3ccd64037
eine benutzerdefinierte Bridge, die ich mit Docker für die zukünftige Kommunikation zwischen Containern erstellt habe. Es wird nicht verwendet.
Aktualisieren:
Ich habe gerade festgestellt, dass ich mit der ersten Konfiguration einfach über die IP-Adresse (172.17.0.2) der VM-Gäste eine Verbindung zum Docker-Container herstellen kann.
Meine anfängliche Einrichtung war die zweite Konfiguration, da ich RDP in die VMs einbauen wollte. Dies ist einfacher, da der Macvtap-Treiber die VMs direkt mit dem LAN verbindet und keine SSH-Verbindung erforderlich ist. Dann konnte ich den Container nicht erreichen.
docker network inspect bridge
. Wenn die json-config-Datei nicht funktioniert, liegt dies möglicherweise daran, dass in den Dokumenten Folgendes angegeben ist: "Hinweis: Sie können in daemon.json keine Optionen festlegen, die bereits beim Start des Daemons als Flag festgelegt wurden."Ich bin es gewohnt, dies mit dem folgenden Setup zu implementieren:
Ich schaffe eine
br0
Brücke mit dem physischen Nizza im Innerenkvm-maschinen werden über das unten stehende qemu xml config snippet auf der brücke verbunden
Docker-Stacks laufen alle gleich: Ich reserviere für jeden Stack eine öffentliche routbare IP. Ich verbinde diese öffentliche IP mit der Bridge
br0
über das unten stehende Konfigurations-Snippet des opensvc-Dienstes.In diesem
[ip#0]
Abschnitt wird angegeben, dass die IP-1.2.3.4
Adresse in dem Container mit der Ressourcen-ID konfiguriert werden soll, beicontainer#0
der es sich um ein Docker-Google / Pause handelt und die mit Bridge verbunden istbr0
Alle anderen Docker im Stack erben die Netzwerkkonfiguration
container#0
aufgrund der Konfigurationnetns = container#0
in der Docker-DeklarationWenn der opensvc-Dienst gestartet wird, wird die Netzwerkeinrichtung vom Agenten durchgeführt, wobei alle in den folgenden Protokollen angegebenen Befehle erstellt werden
opensvc service configuration
Startprotokoll
quelle
Als ich die Frage las, suchte ich nach einer Möglichkeit, eine Verbindung
virbr0
zu einem Docker-Netzwerk herzustellen. Das Bild unten ist meine Modifikation dessen, was meiner Meinung nach gefragt wurde:In diesem Fall besteht die Antwort darin, ein
macvlan
Netzwerk zu verwenden, mit dem Sie ein Docker-Netzwerk direkt an ein Hostgerät anschließen können. So etwas wie das Folgende würde Ihnen das bringen, was Sie wollen:docker network create --driver=macvlan --subnet=192.168.0.0/16 -o parent=virbr0 mynet
quelle