Verwenden Sie Hostnetzwerk und zusätzliche Netzwerke in Docker Compose

9

Ich versuche eine Entwicklungsumgebung für mein Projekt einzurichten.

Ich habe einen Container (ms1), der in sein eigenes Netzwerk ("Dienste" in meinem Fall) und einen Container (apigateway) sollte, der auf dieses Netzwerk zugreifen sollte, während ein HTTP-Port dem Netzwerk des Hosts ausgesetzt wird.

Im Idealfall würde meine Docker-Datei so aussehen:

%Vor%

docker-compose erlaubt nicht die gleichzeitige Verwendung von network_mode und Netzwerken.

Habe ich andere Alternativen?

Im Moment benutze ich das:

%Vor%

und dann hört der Containerbehälter auf 0.0.0.0:13010. Es funktioniert, aber es ist langsam und es friert ein, wenn die Internetverbindung des Hosts ausfällt.

Außerdem plane ich, in Zukunft Vagabunden auf Docker zu verwenden, erlaubt es, auf eine saubere Art zu lösen?

    
phzonta 21.03.2016, 21:47
quelle

3 Antworten

0

Ich würde das versuchen:

1 / Finden Sie das Host-Netzwerk docker network ls

2 / Verwenden Sie diese dockercompose-Datei

%Vor%     
Plup 11.07.2016 03:36
quelle
0

In Docker 1.13 sollten Sie in der Lage sein, einen Dienst zur Überbrückung zwischen den beiden Netzwerken zu erstellen. Ich verwende etwas ähnliches, um ein anderes Problem und ich denke, das könnte auch hier helfen:

%Vor%     
sas 09.02.2017 19:23
quelle
0

expose in docker-compose veröffentlicht den Port nicht auf dem Host . Da Sie wahrscheinlich keine Serviceverknüpfungen mehr benötigen (stattdessen sollten Sie sich wie bereits auf Docker-Netzwerke verlassen), hat die Option im Allgemeinen nur einen begrenzten Wert und scheint Ihnen in Ihrem Szenario überhaupt keinen Wert zu bieten.

Ich verdächtige Sie haben es aus Versehen benutzt und nachdem Sie gemerkt haben, dass es von selbst keine Wirkung zu haben schien, stolperte es über die Tatsache, dass die Verwendung des Host-Netzwerktreibers "machen" würde es funktioniert". Das hat nichts mit der Eigenschaft expose zu tun, wohlgemerkt. Es ist nur so, dass der Host-Netzwerktreiber es ermöglicht, dass enthaltene Prozesse direkt an die Host-Netzwerkschnittstelle gebunden werden. Dadurch können Sie den API-Gateway-Prozess von außen erreichen. Sie könnten die expose Eigenschaft entfernen und es würde immer noch funktionieren.

Wenn dies der einzige Grund ist, warum Sie den Host-Netzwerktreiber ausgewählt haben, dann sind Sie Opfer des XY-Problems :

(tl; dr) Sie sollten den Host-Netzwerktreiber in normalen Situationen nie verwenden müssen, der Standard-Bridge-Netzwerktreiber funktioniert einwandfrei. Was Sie suchen, ist die ports -Eigenschaft, nicht expose . Dies richtet die entsprechende Portweiterleitung hinter den Kulissen ein.

    
tne 26.11.2017 23:16
quelle