リモートで実行されたコマンドのDockerコンテナからリアルタイムのstdoutを取得する

リモートで実行されたコマンドのDockerコンテナからリアルタイムのstdoutを取得する

私はリアルタイム標準出力docker コンテナで実行しているコマンドから。ただし、別のホストから実行されるリモート コマンドからこれを実行する必要があります。

dockerホスト上ではdockerコマンドを実行して-it必要なリアルタイム出力を得ることができます。しかし、次のような制約があります。持っている-tコマンドをリモートで実行すると、以前のソリューションは役に立たなくなります。ターミナルがまったくないため、リモート コマンドでは存在しない $TERM に基づいて疑似ターミナルを実行するため、使用できません。

-dまた、docker コマンドを実行してバックグラウンドで実行しようとしましたdocker logs -f <container>が、プロセスの最後に出力がすべて一度に出力されます。

解決策やアドバイスがあれば、ぜひ教えてください。また、これが別のスタックに属する場合は、訂正してください。

答え1

Docker の github のヘルプからこれを理解しました。コンテナ内で Python スクリプトを実行しようとしていることを述べ忘れましたが、それは重要ではないと思いました。

これは実際にはDockerの問題ではなく、Pythonの問題でした。Dockerはすでにリアルタイムでstdoutを提供している. Python はすべての stdout をバッファに保持し、スクリプトが完了するまでフラッシュしませんでした。ただし、コードがターミナルで-t.を使用して実行された場合は例外です。

python -u <script>docker コマンドでは、Python が stdout をバッファリングするのを防ぐために、スクリプトを呼び出すだけで済みました。

答え2

では、logsproutでELKスタックを使ってみませんか。すべてのDockerコンテナからリアルタイムのログを取得できるほか、ログを検索したり、他にもたくさんの便利な機能があります。

関連情報