我有以下 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"]