通过远程执行的命令从 docker 容器获取实时标准输出

通过远程执行的命令从 docker 容器获取实时标准输出

我正在尝试获取实时标准输出来自我在 docker 容器中运行的命令。但是,我需要通过从另一台主机运行的远程命令来执行此操作。

当我在 docker 主机上时,我可以运行 docker 命令-it并获取我需要的实时输出。然而,我有这个限制,我远程运行命令使之前的解决方案毫无用处。我无法使用,-t因为它运行一个基于 $TERM 的伪终端,该终端不存在于远程命令中,因为根本没有终端。

我还尝试运行 docker 命令以-d在后台运行它,docker logs -f <container>但在进程结束时仍然一次性给出输出。

如果这属于另一个堆栈,任何解决方案或建议都会受到赞赏并纠正我。

答案1

从 Docker 的 github 上的一些帮助中找到了这一点。我没有提到我正在尝试在容器中运行 python 脚本,但我认为这并不重要。

这实际上不是 docker 的问题,而是 python 的问题。我学会了Docker 已经提供了实时标准输出。 Python 将所有标准输出保存在其缓冲区中,并且在脚本完成之前不会刷新。除非代码在带有-t.

在 docker 命令中,我需要的只是调用脚本以python -u <script>防止 python 缓冲标准输出。

答案2

那么为什么不使用 ELK 堆栈和 Logsprout 你可以从所有 Docker 容器获取实时日志,而且你可以在日志和许多其他很酷的东西中进行搜索

相关内容