2016-04-06 10 views
0

Ich habe 2 Andockfensters Behälter - man eine Überwachung app läuft und der andere Dienst ausgeführt wird, die beide mit net = Host in demselben Netzwerk-Namensraum ausgeführt wird. (Mesos läuft alle Aufträge mit diesem Parameter.)Abfrage-Port-Nummer durch den Prozess in einem Behälter verwendet Andockfensters

Der Dienst an einen zufälligen Port binden kann. Wie kann ich aus dem Überwachungscontainer abfragen, an welchen Port sich der Dienst gebunden hat?

Ich habe versucht, das Lesen/proc/net/tcp, aber das scheint sehr komplex. Gibt es einen einfacheren Weg?

+0

'Docker container_id' inspiziert –

+0

Ich würde nicht den Container-ID im Voraus mit. Ich habe den Docker-Socket innerhalb des Überwachungscontainers gemountet und kann Docker-APIs verwenden, um sie abzufragen. Ich habe versucht, nach freigelegten Port-Nummern zu fragen, aber ich bekomme nur die Port-Nummern, die für Container offen sind, die nicht mit net = host laufen. – krish7919

+0

Können Sie bitte klarstellen, in welcher Umgebung Sie sich befinden? Es scheint mir, dass Sie einen Mesos-Cluster verwenden? Wenn dies der Fall ist, verwenden Sie keine Links wie unten angegeben. –

Antwort

1

So finden, wenn ich richtig verstehe, bindet der Dienst an zufälligen Ports? Wenn ja, warum ist das der Fall? Ich denke, das ist alles andere als ideal, alle Dienste, die ich benutze, werden in einem Container an einen bestimmten Port ausgegeben. Wenn Sie beispielsweise eine App (über Marathon gestartet) haben, die an einen über eine Umgebungsvariable definierten Anschluss bindet, können Sie diese Umgebungsvariable beim Starten des Containers festlegen und den Netzwerkmodus BRIDGED verwenden, damit Mesos auswählen kann ein Port von seinem Port-Bereich.

Wenn Sie Mesos DNS installieren, können Sie es verwenden, um die IP/Port-Kombination aus dem Namen der Anwendung zu bestimmen. Z.B. Wenn der Name der Marathon-App testapp lautet, lautet der Servicename testapp.marathon.mesos.

Siehe

+0

Ich kann den Bridge-Modus nicht wählen, da mesos den Host-Netzwerkmodus erzwingt. Ich habe meine App so umgestaltet, dass sie zufällige Ports verwendet, sodass ich mehrere Instanzen des Service auf demselben Computer ausführen kann. Jetzt schlägt die Service-Erkennung fehl, weil es im Host-Netzwerkmodus keine Möglichkeit gibt, im Voraus zu wissen, an welchen Port der Dienst bindet. Ich versuche, eine Lösung zu finden, die Aurora ab sofort verwendet, wenn Aurora nicht damit umgehen kann Ich werde mehr erforschen. Irgendwelche Vorschläge sind sehr willkommen. :) – krish7919

+1

Ich weiß leider nichts über Aurora. Wir verwenden CoreOS-Cluster mit Marathon als Scheduler und alle unsere Anwendungen werden als Docker-Container ausgeführt. Bridged Networking funktioniert gut für uns. Warum sehen Sie, dass nur Host-Netzwerk funktioniert? Ist das ein Problem mit Aurora? – Tobi

+0

"Beachten Sie, dass wir derzeit standardmäßig ein Netzwerk hosten, wenn ein Docker-Image ausgeführt wird, um die Ausführung eines Docker-Images als Executor einfacher zu unterstützen." Von: http://mesos.apache.org/documentation/latest/docker-containerizer/ Ich bin überrascht, wie tut Marathon + Mesos hat Bridged Networking und Aurora + Mesos nicht.Ist es so einfach, ein --net = überbrückt zu geben, wenn ein Docker-Container in Aurora ausgeführt wird? – krish7919