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?
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% 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.
Tags und Links docker networking vagrant docker-compose devops