لماذا لا بلدي عامل الميناء في الواقع تسجيل أي شيء?

لدي ملف بايثون التالي:

 import time from datetime import datetime while True:     time.sleep(1)     print(datetime.now())

لقد أضفته إلى دوكيرفيل:

FROM python:3.7WORKDIR /testCOPY test.py /test/CMD ["python", "test.py"]

إذا كنت بناء هذا وتشغيل مع

sudo docker run -it --name test myimage

كل شيء رائع. كل ثانية أو نحو ذلك يطبع الوقت الحالي.

من ناحية أخرى ، إذا كنت تشغيله مع:

sudo docker run -d --name test myimage

تشغيله قبالة في الخلفية ، ولكن إذا كنت تفعل...

sudo docker logs test

لا أحصل على شيء! لا شيء الرتق.

أي فكرة عن سبب حدوث ذلك, أو كيف يمكنني معرفة ذلك? كلاهما عندما أستخدم -d وليس عندما أركض docker inspect انه يعطيني "Type": "json-file", "Config": {}

أنا رونينغ دوكر 18.06.1-سي ، بناء 68 إف 7 أ ، على أوبونتو 18.04.

دون تي المرفقة ، بيثون من المرجح التخزين المؤقت ستدوت. هناك الكثير من الطرق لحل هذه المشكلة، بما في ذلك إضافة هذا التغيير إلى البرنامج النصي الخاص بك:

print(datetime.now(), flush=True)

أو بدون تغيير البرنامج النصي الخاص بك ، يمكنك تشغيل stdbuf لإيقاف التخزين المؤقت الإخراج:

CMD ["stdbuf", "-oL", "python", "test.py"]

@بمتش كان ذلك ، شكرا! قضيت بضع ساعات الليلة الماضية القتال هذا الشيء الرتق.

تحقق مما إذا كان التخزين المؤقت إو: python - Disable output buffering - Stack Overflow