【问题标题】:`Docker logs` erroneously appears empty until container stops在容器停止之前,“Docker 日志”错误地显示为空
【发布时间】:2019-11-04 21:20:10
【问题描述】:

在运行调用 Python 进程的 Docker 容器时,运行 docker logs ##### 将不会返回任何内容,尽管容器内部发生了向 stdout 发送的事件。在我运行docker stop ###### 之前,日志中会出现注释,在这种情况下会返回预期的输出。 docker logs -f ##### 也是如此——即使在预期的情况下,也不会出现任何内容,直到容器停止。

这对于调试来说非常麻烦。 为什么会发生这种情况?是否可以更改设置以确保实时更新日志?

【问题讨论】:

    标签: python docker


    【解决方案1】:

    这可能是因为 stdout 和 stderr 是缓冲流。

    交互时,stdout 和 stderr 流是行缓冲的。否则,它们会像常规文本文件一样被块缓冲。您可以使用 -u 命令行选项覆盖此值。

    尝试添加 -u 标志。

    CMD [ "python", "-u", "./your_script.py" ]
    

    或者,正如 David Maze 所指出的,您可以设置 PYTHONUNBUFFERED environment variable 并获得相同的结果。

    ENV PYTHONUNBUFFERED=1
    

    您也可以在每次调用 print() 时刷新标准输出。

    sys.stdout.flush()
    

    或者,请参阅logging module

    【讨论】:

    猜你喜欢
    • 2016-11-22
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2017-07-30
    • 2012-10-15
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多