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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 04:32:20816ブラウズ

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

Python アプリでの切り離された Docker コンテナと印刷出力

(-d フラグを使用して) 切り離された Docker コンテナで Python (2.7) アプリケーションを実行すると、ユーザーは次のような問題に遭遇する可能性があります。アプリケーションの print ステートメントが出力を生成しない状況。

Python 出力についてバッファリング

Python はデフォルトでバッファリングされた出力を使用します。つまり、画面に送信する前に出力をバッファーに保存します。デタッチされたコンテナーでは、このバッファーが十分な頻度でフラッシュされず、出力が失われる可能性があります。

バッファーなし出力の使用

この問題を解決するには、バッファーなし出力を -u オプションで使用できます。 flag:

CMD ["python", "-u", "main.py"]

これにより、バッファリングに関係なく、出力がすぐに画面に書き込まれるようになります。 settings.

Docker ログの相関

バッファリングされていない出力では、print ステートメントが Docker ログに表示されます:

docker logs myapp
> App started

「-u」を使用しない切り離されたコンテナーの動作

-u フラグが使用されていない場合、print は切り離された状態で次のように動作します。コンテナ:

  • 出力はバッファに保存されます。
  • バッファがいっぱいになると、画面にフラッシュされます。
  • コンテナがバッファより先に終了した場合がいっぱいの場合、出力は失われます。

デバッグヒント

  • Python -u フラグを使用します: Docker の外部でバッファリングされていない出力でアプリケーションをテストし、問題がコンテナ固有のものであることを確認します。
  • チェックdocker logs: -u フラグを指定しなくても、出力は Docker ログに表示されるはずです。遅延。
  • コンテナにアタッチ: バッファがデタッチ前にフラッシュできるほど小さい場合、dockerattach を使用してコンテナにアタッチすると、出力が表示されることがあります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。