在Docker 容器中執行程式碼時,使用者可能會遇到發生stdout 緩衝的情況,導致輸出間歇性刷新而不是輸出間歇性刷新而不是出現一代後立即。這種現象可能會因容器的作業系統和程式碼本身而異。
在一種特殊情況下,在 Docker 容器中執行「procwrap」程式時會出現此問題。當子程序成功執行時,標準輸出和日誌檔案的輸出突然出現,表示緩衝了響應。但是,在容器外部運行相同的程式碼會導致同步輸出。
調查與故障排除
初步觀察顯示此問題與 stdout 緩衝有關。事實證明,修改 Docker 或 Linux 設定(例如使用「stdbuf」)無法有效解決該問題。
解決方案
為了克服這一挑戰,對正在容器化的控制台應用程式的原始程式碼。這些修改強制在每次寫入操作後立即刷新檔案。這確保了數據不會在應用程式內緩衝並即時輸出。
其他注意事項
用於解決此問題的具體配置涉及編寫的自訂日誌記錄到「/dev/stdout」並在每次日誌寫入時觸發文件刷新。這使得 Docker 容器可以透過「docker log」命令立即顯示訊息。
以上是為什麼我的 Docker 容器顯示間歇性的 stdout 輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!