为什么我看不到任何 docker 日志?

aah*_*nik 3 python logging docker docker-logs

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

# entry.py

import time

while True:
    print("hello")
    time.sleep(2)

Run Code Online (Sandbox Code Playgroud)

我有一个运行此脚本的超简单 docker 文件。


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

Run Code Online (Sandbox Code Playgroud)

首先我构建docker镜像:


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

Run Code Online (Sandbox Code Playgroud)

现在我用这个-it选项运行它,它按预期工作。

$ docker build -t dtest .
Run Code Online (Sandbox Code Playgroud)

但是当我在分离模式下运行它,然后尝试查看日志时,我什么也看不到。

$ docker run -it dtest
# hello printed to screen every two seconds
Run Code Online (Sandbox Code Playgroud)

Ada*_*ith 5

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

您可以将 Python 代码更改为:

print("Hello", flush=True)
Run Code Online (Sandbox Code Playgroud)

或者python使用-u强制无缓冲输出的标志运行

FROM python:3.9
COPY entry.py entry.py
ENTRYPOINT ["python", "-u"]
CMD ["entry.py"]
Run Code Online (Sandbox Code Playgroud)