デタッチされた Python コンテナ: ログ用のバッファなし出力
-d フラグを使用してデタッチされた Docker コンテナで Python アプリケーションを実行する場合、コンテナからの出力の欠如が発生しました。コンテナは実行されているように見えますが、アプリケーションからの予期された print ステートメントは、ログまたは接続されたターミナル セッション経由で表示されません。
問題は、Python の print 関数の動作にあります。デフォルトでは、Python はパフォーマンスを向上させるために出力をバッファリングします。このバッファリングは、改行文字が見つかるとすぐに出力が印刷される対話型シェルではすぐに表示されません。
デタッチされたコンテナーで実行すると、アプリケーションの出力はバッファリングされ、すぐにはフラッシュされない場合があります。これを解決するには、Dockerfile の CMD の Python コマンドに -u フラグを追加して、バッファなしの出力を使用します。
CMD ["python", "-u", "main.py"]
バッファなしの出力を使用すると、Python の stdout および stderr ストリームが即座にフラッシュされ、ログをキャプチャできるようになります。 print ステートメント。
docker logs myapp
注:
-u フラグはバッファリングされていない出力を強制するため、場合によってはパフォーマンスが低下する可能性があります。出力バッファリング動作を手動で制御したい場合は、ロギング モジュールを使用するか、独自のバッファリング ソリューションを実装することを検討してください。
以上が切り離された Docker コンテナの Python 出力が見つからないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。