Holen Sie sich bei einem remote ausgeführten Befehl die Standardausgabe in Echtzeit aus einem Docker-Container

Holen Sie sich bei einem remote ausgeführten Befehl die Standardausgabe in Echtzeit aus einem Docker-Container

Ich versuche, dieEchtzeit-Standardausgabevon einem Befehl aus, den ich in einem Docker-Container ausführe. Ich muss dies jedoch von einem Remote-Befehl aus tun, der von einem anderen Host ausgeführt wird.

Wenn ich auf dem Docker-Host bin, kann ich meinen Docker-Befehl ausführen -itund die Echtzeitausgabe erhalten, die ich brauche. Allerdings habe ich diese Einschränkung, wo ichhabenum den Befehl remote auszuführen, wodurch die vorherige Lösung nutzlos wird. Ich kann es nicht verwenden, -tda es ein auf $TERM basierendes Pseudoterminal ausführt, das mit dem Remote-Befehl nicht existiert, da überhaupt kein Terminal vorhanden ist.

Ich habe auch versucht, den Docker-Befehl -dim Hintergrund auszuführen, docker logs -f <container>aber die Ausgabe wird immer noch auf einmal am Ende des Vorgangs ausgegeben.

Ich bin für alle Lösungen und Ratschläge dankbar. Korrigieren Sie mich, wenn dies auf einen anderen Stapel gehört.

Antwort1

Habe das mithilfe von Dockers GitHub herausgefunden. Ich habe vergessen zu erwähnen, dass ich versuchte, ein Python-Skript im Container auszuführen, aber ich dachte nicht, dass das wichtig sei.

Dies war eigentlich kein Docker-Problem, sondern ein Python-Problem. Ich habe gelerntDocker stellt stdout bereits in Echtzeit bereit. Python hielt die gesamte Standardausgabe in seinem Puffer und leerte sie erst, als das Skript abgeschlossen war. Außer wenn der Code in einem Terminal mit ausgeführt wurde -t.

Im Docker-Befehl musste ich nur das Skript aufrufen, um python -u <script>zu verhindern, dass Python die Standardausgabe puffert.

Antwort2

Warum verwenden Sie nicht den ELK-Stack mit Logsprout? Sie können Echtzeitprotokolle von allen Docker-Containern abrufen und außerdem in den Protokollen und vielen anderen coolen Dingen suchen.

verwandte Informationen