Docker コンテナでの stdout バッファリング
問題:
Docker コンテナ内でのプロセスの実行プロセスがホストまたは macOS 上で実行される場合とは異なり、標準出力出力がバッファされる可能性があります。この一貫性のない動作は Go 1.6.3 を使用するときに観察され、特に Debian イメージに基づくコンテナで顕著です。
分析:
問題は stdout バッファリング動作にあります。コンテナの。デフォルトでは、stdout は Docker コンテナにバッファリングされます。つまり、特定の制限に達するかフラッシュがトリガーされるまで出力が収集されます。これにより、大量のデータを生成するプロセスを実行するときに出力が断続的になる可能性があります。
原因:
標準出力バッファリングは、Docker によって継承される Linux カーネル機能です。コンテナ。ホスト ファイルシステムへの書き込み数を減らすことで、システムのパフォーマンスを最適化します。
解決策:
Docker コンテナでの stdout バッファリングを克服するには、いくつかの方法があります。
例:
提供されている例では、次のコード スニペットを使用して stdout バッファリングを無効にできます:
<code class="go">cmd := exec.Command("ping", "127.0.0.1") cmd.Stdout = io.MultiWriter(os.Stdout, logWriter) cmd.Env = append(os.Environ(), "unbuffer=true") err := cmd.Run()</code>
以上がDocker コンテナで Stdout バッファリングが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。