Stdout-Pufferung in Docker-Containern: Ein Fall von Debian vs. Ubuntu
Beim Ausführen von Code in einem Docker-Container kann es zu Stdout-Pufferung kommen In einigen Fällen, in anderen jedoch nicht. Dieses Problem wird in einem Szenario beobachtet, in dem stdout mithilfe eines io.MultiWriter sowohl an die Konsole als auch an eine Protokolldatei weitergeleitet wird.
Ursache: Plattformunterschiede
Der Stamm Die Ursache für dieses Verhalten liegt in den Plattformunterschieden zwischen Debian-basierten Images und Ubuntu-basierten Images. Debian scheint Standardausgabe standardmäßig zu puffern, während Ubuntu Standardausgabe synchron verarbeitet.
Demonstration mit Docker-Dateien
Dies kann anhand von zwei Docker-Dateien veranschaulicht werden, eine davon basiert auf Debian:wheezy und das andere auf 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)
Das Ausführen von procwrap im Container basierend auf dem Wheeze-Image führt zu einem gepufferten Stdout, während das Ausführen von procwrap im Container basierend auf dem vertrauenswürdigen Image zu einem synchronen Stdout führt. Allerdings zeigt die Ausführung von procwrap auf einer Debian-VM ohne Docker keine Standardausgabepufferung.
Lösungsoptionen
Um dieses Problem zu beheben, können mehrere Ansätze in Betracht gezogen werden:
Letztendlich Die beste Lösung hängt von der jeweiligen Anwendung und Betriebsumgebung ab.
Das obige ist der detaillierte Inhalt vonWarum unterscheidet sich die Stdout-Pufferung zwischen Debian- und Ubuntu-Docker-Containern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!