我正在尝试获取实时标准输出来自我在 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 容器获取实时日志,而且你可以在日志和许多其他很酷的东西中进行搜索