Docker 容器中的標準輸出緩衝:Debian 與Ubuntu 的案例
在Docker 容器中執行程式碼時,標準輸出緩衝可能會發生在某些情況下,但在其他情況下則不然。在使用 io.MultiWriter 將 stdout 定向到控制台和日誌檔案的情況下會出現此問題。
根本原因:平台差異
根本原因造成此行為的原因在於基於 Debian 的映像和基於 Ubuntu 的映像之間的平台差異。 Debian 預設會緩衝 stdout,而 Ubuntu 會同步處理 stdout。
使用Dockerfiles 進行演示
這可以使用兩個Dockerfile 進行說明,一個基於Debian:wheezy 和Ubuntu 上的另一個:trusty:
# TRUSTY Dockerfile FROM ubuntu:trusty # ... (rest of the Dockerfile as provided in the problem description) # WHEEZY Dockerfile FROM debian:wheezy # ... (rest of the Dockerfile as provided in the problem description)
基於wheeze 映像在容器中運行procwrap 會產生緩衝的stdout,而基於可信任映像在容器中運行它會產生緩衝的stdout同步標準輸出。但是,在沒有 Docker 的 Debian VM 上執行 procwrap 不會出現 stdout 緩衝。
解決方案選項
要解決此問題,可以考慮以下幾種方法:
最終,最佳方案取決於具體的應用和運行環境。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3