Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Bekas Docker Python Terpisah Saya Tidak Menunjukkan Output Cetakan?

Mengapa Bekas Docker Python Terpisah Saya Tidak Menunjukkan Output Cetakan?

DDD
DDDasal
2024-12-06 20:30:16649semak imbas

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

Memahami Gelagat Cetakan dalam Bekas Python Docker Terpisah

Dalam aplikasi Python yang dijalankan dalam bekas Docker yang terpisah, anda mungkin menghadapi kekurangan output apabila menggunakan pernyataan cetakan. Isu ini timbul apabila strim STDOUT dan STDERR ditimbal dalam bekas.

Masalahnya

Apabila anda melaksanakan apl Python (2.7) menggunakan CMD Docker ["python","main.py "], skrip main.py dimulakan dengan cetakan "Apl dimulakan" dan memasuki gelung tidak tentu. Memerhati bekas dengan bendera -it menunjukkan output yang dijangkakan dalam kedua-dua terminal dan log Docker.

Walau bagaimanapun, menggunakan bendera -d (mod tertanggal) melancarkan bekas tetapi menyekat output yang dijangka daripada kelihatan dalam log atau terminal.

Penyelesaian

Untuk menyelesaikan tingkah laku ini, pilihan output tanpa buffer Python boleh digunakan. Dengan mengubah suai CMD Fail Docker kepada CMD ["python","-u","main.py"], penimbalan STDOUT dan STDERR dilumpuhkan. Ini membolehkan Python mencetak serta-merta, menjadikan output kelihatan apabila menanyakan docker logs myapp.

Mengapa Output Tidak Dibuffer?

Argumen -u memaksa Python untuk mengalirkan output ke aliran standard tanpa menunggu penimbal untuk diisi. Ini memastikan cetakan dipaparkan dengan segera, walaupun semasa skrip berjalan di latar belakang.

Pemerhatian Tambahan

Berbeza dengan mencetak, menggunakan fungsi logging.warning("teks") modul pengelogan menjana keluaran serta-merta walaupun tanpa mod unbuffered. Ini kerana pengelogan mengendalikan pembilasan secara dalaman.

Dokumentasi Python untuk pilihan -u menyatakan bahawa ia menyahbuffer kedua-dua strim STDOUT dan STDERR, membenarkan paparan output langsung dalam bekas yang terpisah.

Atas ialah kandungan terperinci Mengapa Bekas Docker Python Terpisah Saya Tidak Menunjukkan Output Cetakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn