Lassen Sie zwei Container miteinander verknüpfen [duplizieren]

8

Ich habe ein paar Andock-Container und einen Sonderfall, dass zwei von ihnen miteinander reden müssen, also müssen sie einander am besten über den Link kennen. Ich kann einen Container mit dem anderen verbinden, aber das Problem ist, dass ich ihnen nicht sagen kann, dass der zweite zu dem ersten sprechen kann.

Ich habe versucht, den ersten Container zu erstellen und auszuführen und habe ihn gestoppt. Dann habe ich den zweiten Container erstellt und ihn ebenfalls gestoppt. Als nächstes startete ich den ersten Container mit der Verbindung zur zweiten und startete die zweite mit der ersten. Danach wurde meine Maschine verrückt, der Docker-Prozess nahm alle CPU und Speicher und keiner der Container war zugänglich. Als du den Prozess beendet hast, kam ein neuer mit dem gleichen heraus. Selbst wenn ich Docker deinstalliert habe, starte die Maschine neu und installiere Docker erneut, es geht zurück in den verrückten Zustand, ohne auch nur einen der Container zu starten.

Hat jemand eine Lösung, wie man zwei Container miteinander verbindet oder sie in beiden Richtungen miteinander reden lässt?

    
Mario 19.12.2014, 09:53
quelle

5 Antworten

15

Ein möglicher Ansatz, den nicht verwendet, ist das Zuordnen der Container, indem ein Port für jeden Container verfügbar gemacht und die Container an die Host -Schnittstelle gebunden werden.

%Vor%

Auf diese Weise kann container1 über localhost: 6666 auf container2 zugreifen und container2 kann auf container1 über localhost: 5555 .

Dies ist nicht Verknüpfung, aber es gibt keine bidirektionale Verknüpfung möglich .

Die Dokumentation für Andock-Netzwerke erklärt dies weiter.

    
wassgren 20.12.2014, 18:42
quelle
11

Container im selben Netzwerk sind miteinander verbunden.

Sie müssen ein Netzwerk für diese Container erstellen.

%Vor%

Beim Ausführen der Container müssen Sie das Netzwerk angeben.

%Vor%

Nachdem Sie die Container erstellt haben, können Sie andere Container im selben Netzwerk pingen, indem Sie nur den Namen der Container verwenden

%Vor%     
Relu Mesaros 04.12.2016 22:40
quelle
9

Ein anderer Ansatz besteht darin, die Container zu verbinden, indem Sie die Ports an die docker0 -Schnittstelle binden. Alle Docker-Container sind standardmäßig mit dieser Brücke verbunden (die normalerweise die IP-Adresse 172.17.42.1 hat).

%Vor%

Die Container können über 172.17.42.1 und den spezifischen Port aufeinander zugreifen.

Eine ähnliche Lösung wie @wassgreen wird bereitgestellt, hat aber den Vorteil, dass die Container keinen Zugriff auf die Hostschnittstellen haben.

Siehe Erweiterte Netzwerkeinstellungen im Abschnitt --net=host :

  

[...] aber es lässt Containerprozesse wie jeder andere root-Prozess auch Ports mit niedriger Nummer öffnen. Außerdem kann der Container auf lokale Netzwerkdienste wie D-Bus zugreifen. Dies kann dazu führen, dass Prozesse im Container unerwartete Dinge wie einen Neustart des Computers ausführen können. Sie sollten diese Option mit Vorsicht verwenden.

Weitere Informationen zu dieser Verbindung über die docker0 -Schnittstelle finden Sie unter Unorthodoxe Andockverbindung ohne Links .

    
Sebastian Daschner 25.12.2014 20:11
quelle
1

Überprüfen Sie die Option --link in Docker-Dokumenten. Sie können 2 Container mit dem folgenden Befehl verknüpfen:

%Vor%     
isin 04.07.2016 09:41
quelle
1

Das Bridge- oder Hostnetzwerk funktioniert, wenn 2 Container auf demselben Host ausgeführt werden. Wenn zwei Container auf verschiedenen Hosts laufen, können sie nicht miteinander kommunizieren.

Wenn zwei Container auf verschiedenen Hosts miteinander kommunizieren sollen, wird das Andock-Overlay-Netzwerk sollte verwendet werden.

Das Andockfenster --link ist eine veraltete Funktion, wie in docker link doc erwähnt .

    
CloudStax 18.09.2017 00:48
quelle

Tags und Links