首页  >  文章  >  后端开发  >  为什么我的分离 Docker 容器不显示 Python 打印输出?

为什么我的分离 Docker 容器不显示 Python 打印输出?

Susan Sarandon
Susan Sarandon原创
2024-11-23 04:32:20814浏览

Why Doesn't My Detached Docker Container Show Python Print Output?

Python 应用程序中分离的 Docker 容器和打印输出

在分离的 Docker 容器中运行 Python (2.7) 应用程序(使用 -d 标志)时,用户可能会遇到应用程序的 print 语句不产生任何输出的情况。

理解 Python 输出缓冲

Python 默认使用缓冲输出,这意味着它在将输出发送到屏幕之前将其存储在缓冲区中。在分离的容器中,此缓冲区可能无法足够频繁地刷新,从而导致缺少输出。

使用无缓冲输出

要解决此问题,可以将无缓冲输出与 -u 一起使用flag:

CMD ["python", "-u", "main.py"]

这确保输出立即写入屏幕,无论缓冲如何设置。

Docker 日志关联

使用无缓冲输出,打印语句将在 Docker 日志中可见:

docker logs myapp
> App started

不带“-u”的分离容器行为

当未使用 -u 标志时,打印在分离中的行为如下容器:

  • 输出存储在缓冲区中。
  • 如果缓冲区已满,则将其刷新到屏幕。
  • 如果容器在缓冲区之前退出已满,输出丢失。

调试中提示

  • 使用 python -u 标志:使用 Docker 外部的无缓冲输出测试应用程序,以确保问题是特定于容器的。
  • 检查docker 日志: 即使没有 -u 标志,输出也应该在 Docker 日志中可见,尽管延迟。
  • 附加到容器:如果缓冲区小到足以在分离之前刷新,则使用 docker Attach 附加到容器可能会显示输出。

以上是为什么我的分离 Docker 容器不显示 Python 打印输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn