Docker コンテナ内でコードを実行すると、ユーザーは stdout バッファリングが発生し、出力が表示されずに断続的にフラッシュされるインスタンスに遭遇することがあります。生成直後。この現象は、コンテナのオペレーティング システムとコード自体によって異なります。
ある特定のケースでは、Docker コンテナ内で「procwrap」プログラムを実行するときに問題が発生しました。サブプロセスは正常に実行されましたが、stdout とログ ファイルへの出力がバースト的に表示され、バッファされた応答が示されました。ただし、コンテナの外部で同じコードを実行すると、同期出力が発生しました。
調査とトラブルシューティング
初期の観察により、問題が stdout バッファリングに関連していることが判明しました。 Docker または Linux 設定の変更 (「stdbuf」の使用など) は、問題の解決に効果がないことが判明しました。
解決策
この課題を克服するために、コンテナ化されていたコンソール アプリケーションのソース コード。これらの変更により、各書き込み操作の後に即時にファイルがフラッシュされます。これにより、データがアプリケーション内でバッファリングされず、リアルタイムで出力されることが保証されました。
追加の考慮事項
この問題を解決するために使用された特定の構成には、次のようなカスタム ログが含まれていました。 「/dev/stdout」にコピーし、ログの書き込みごとにファイルのフラッシュをトリガーしました。これにより、Docker コンテナは「docker logs」コマンドを通じてメッセージをすぐに表示できるようになりました。
以上がDocker コンテナーで断続的な stdout 出力が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。