私はリアルタイム標準出力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コンテナからリアルタイムのログを取得できるほか、ログを検索したり、他にもたくさんの便利な機能があります。