Bekas Python Terpisah: Output Tidak Tertimbal untuk Pembalakan
Apabila menjalankan aplikasi Python dalam bekas Docker yang terpisah menggunakan bendera -d, anda boleh menghadapi kekurangan keluaran daripada bekas. Walaupun bekas kelihatan berjalan, penyataan cetakan yang dijangka daripada aplikasi tidak kelihatan dalam log atau melalui sesi terminal yang dilampirkan.
Isunya terletak pada gelagat fungsi cetakan Python. Secara lalai, Python menampan outputnya untuk meningkatkan prestasi. Penimbalan ini tidak kelihatan serta-merta dalam cengkerang interaktif, di mana output dicetak sebaik sahaja aksara baris baharu ditemui.
Apabila dijalankan dalam bekas yang terpisah, keluaran aplikasi ditimbal dan mungkin tidak disiram serta-merta. Untuk menyelesaikan masalah ini, gunakan output tidak buffer dengan menambahkan bendera -u pada perintah Python dalam CMD Dockerfile:
CMD ["python", "-u", "main.py"]
Dengan menggunakan output tidak buffer, strim stdout dan stderr Python disiram serta-merta, membenarkan log menangkap penyata cetakan. Anda kemudiannya boleh melihat output melalui:
docker logs myapp
Nota:
Bendera -u memaksa keluaran tidak buffer, yang mungkin mengurangkan prestasi dalam beberapa kes. Jika anda lebih suka mengawal tingkah laku penimbalan output secara manual, pertimbangkan untuk menggunakan modul pengelogan atau melaksanakan penyelesaian penimbalan anda sendiri.
Atas ialah kandungan terperinci Mengapakah output Python bekas Docker saya yang terpisah hilang, dan bagaimana saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!