在分离的 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中文网其他相关文章!