为什么我的 docker 实际上没有记录任何内容?

为什么我的 docker 实际上没有记录任何内容?

我有以下 python 文件:

 import time
 from datetime import datetime


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

我已将其添加到 Dockerfile 中:

FROM python:3.7


WORKDIR /test
COPY 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": {}

我在 Ubuntu 18.04 上运行 Docker 18.06.1-ce,构建版本 e68fc7a。

答案1

如果没有连接 tty,python 可能会缓冲 stdout。有很多方法可以解决这个问题,包括将此更改添加到您的脚本中:

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

或者无需更改脚本,您可以运行stdbuf来关闭输出缓冲:

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

相关内容