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

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

DDD
DDD原创
2024-12-06 20:30:16647浏览

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

了解分离的 Docker Python 容器中的打印行为

在分离的 Docker 容器中运行的 Python 应用程序中,使用 print 语句时可能会遇到缺少输出的情况。当 STDOUT 和 STDERR 流在容器内缓冲时,就会出现此问题。

问题

当您使用 Docker 的 CMD ["python","main.py" 执行 Python 应用程序 (2.7) 时"],main.py 脚本以打印“App started”进行初始化,并进入无限循环。使用 -it 标志观察容器会在终端和 Docker 日志中显示预期输出。

但是,使用 -d 标志(分离模式)启动容器,但会抑制预期输出在终端中可见。日志或终端。

解决方案

要解决此问题,可以利用 Python 的无缓冲输出选项。通过将 Dockerfile CMD 修改为 CMD ["python","-u","main.py"],可以禁用 STDOUT 和 STDERR 的缓冲。这允许 Python 立即打印,使输出在查询 docker log myapp 时可见。

为什么无缓冲输出?

-u 参数强制 Python 将输出刷新到标准流,而无需等待要填充的缓冲区。这确保了即使脚本在后台运行,打印也能及时显示。

其他观察

与打印相反,使用日志记录模块的logging.warning("text")函数即使没有无缓冲模式,也会立即生成输出。这是因为日志记录会在内部处理刷新。

-u 选项的 Python 文档指出它会取消缓冲 STDOUT 和 STDERR 流,从而允许在分离的容器中实时输出显示。

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

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