Python 为什么我看不到docker日志?

Python 为什么我看不到docker日志?,python,docker,logging,docker-logs,Python,Docker,Logging,Docker Logs,我有一个简单的脚本,每2秒打印一次hello #entry.py 导入时间 尽管如此: 打印(“你好”) 时间。睡眠(2) 我有一个超简单的docker文件运行这个脚本 FROM python:3.9 COPY entry.py entry.py CMD python entry.py 首先,我构建docker映像: $docker build-t dtest。 现在,我使用-it选项运行它,它按预期工作 $docker运行-it数据测试 #hello每隔两秒打印到屏幕 但是当我

我有一个简单的脚本,每2秒打印一次hello

#entry.py
导入时间
尽管如此:
打印(“你好”)
时间。睡眠(2)
我有一个超简单的docker文件运行这个脚本


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

首先,我构建docker映像:

$docker build-t dtest。
现在,我使用
-it
选项运行它,它按预期工作

$docker运行-it数据测试
#hello每隔两秒打印到屏幕
但是当我以分离模式运行它,然后尝试查看日志时,我什么也看不到

$docker运行-d数据测试
E19F7285C098AF582E163354BE84774D1307B2409337CB03BDD21729289BDB7
$docker ps
容器ID映像命令已创建状态端口名称
e19f7285c098 dtest“/bin/sh-c‘python…”20秒前上升18秒epic_chatterjee
$docker logs epic_chatterjee
#未显示任何内容,请退出
$docker logs-f epic_chatterjee
#光标持续闪烁,但未显示任何内容

这与Python缓冲输出的方式有关。由于写入stdout的计算代价很高,因此它会尝试收集大的缓冲区,只有在没有连接终端的情况下才会偶尔刷新它们

您可以将Python代码更改为:

print(“Hello”,flush=True)
或者使用
-u
标志运行
python
,该标志强制执行无缓冲输出

FROM python:3.9
COPY entry.py entry.py
ENTRYPOINT ["python", "-u"]
CMD ["entry.py"]

感谢您提供如此优秀的示例代码。这使得问题非常容易复制和调试。