ホームページ > バックエンド開発 > Python チュートリアル > 切り離された Docker Python コンテナに印刷出力が表示されないのはなぜですか?

切り離された Docker Python コンテナに印刷出力が表示されないのはなぜですか?

DDD
リリース: 2024-12-06 20:30:16
オリジナル
660 人が閲覧しました

Why Doesn't My Detached Docker Python Container Show Print Output?

分離された Docker Python コンテナーでの印刷動作を理解する

分離された Docker コンテナー内で実行されている Python アプリケーションでは、print ステートメントを使用すると出力の欠如が発生する場合があります。この問題は、STDOUT ストリームと STDERR ストリームがコンテナ内でバッファリングされている場合に発生します。

問題

Docker の CMD ["python","main.py] を使用して Python アプリ (2.7) を実行する場合"] を実行すると、main.py スクリプトが print "App starting" で初期化され、無限ループに入ります。 -it フラグを使用してコンテナーを観察すると、ターミナルと Docker ログの両方に予期される出力が表示されます。

ただし、-d フラグ (デタッチ モード) を使用すると、コンテナーは起動されますが、予期される出力はログに表示されなくなります。

解決策

この動作を解決するには、Python のバッファなし出力オプションを利用できます。 Dockerfile CMD を CMD ["python","-u","main.py"] に変更すると、STDOUT と STDERR のバッファリングが無効になります。これにより、Python はすぐに印刷できるようになり、myapp の docker ログをクエリするときに出力が表示されるようになります。

バッファなし出力の理由

-u 引数により、Python は、出力を待たずに標準ストリームに出力をフラッシュします。埋めるバッファ。これにより、スクリプトがバックグラウンドで実行されている場合でも、印刷が即座に表示されます。

追加の観察

印刷とは対照的に、ログ モジュールのlogging.warning("text") 関数を使用します。バッファなしモードがなくても即時出力を生成します。これは、ロギングが内部でフラッシュを処理するためです。

-u オプションに関する Python ドキュメントには、STDOUT ストリームと STDERR ストリームの両方のバッファリングが解除され、切り離されたコンテナーでのライブ出力表示が可能になると記載されています。

以上が切り離された Docker Python コンテナに印刷出力が表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート