透過遠端執行的命令從 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 容器獲取實時日誌,而且你可以在日誌和許多其他很酷的東西中進行搜索

相關內容