Почему мой докер на самом деле ничего не регистрирует?

У меня есть следующий файл python:

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

Я добавил его в файл Dockerfile:

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": {}

Я запускаю Docker 18.06.1-ce, сборка e68fc7a, на Ubuntu 18.04.

Без прикрепленного tty python, скорее всего, буферизует stdout. Есть есть много способов решить эту проблему, включая добавление этого изменения в ваш сценарий:

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

Или без изменения вашего скрипта вы можете запустить stdbuf чтобы отключить буферизацию вывода:

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

@BMitch вот и все, спасибо! Прошлой ночью я провел пару часов, сражаясь с этой проклятой штукой.

Проверьте, является ли это буферизацией ввода-вывода: python - Disable output buffering - Stack Overflow