Stdout-Pufferung in Docker-Containern: Ein Fall von Debian vs. Ubuntu
Bei der Ausführung von Code in einem Docker-Container kann es zu einer 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.
Root-Ursache: Plattformunterschiede
Der Root 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 gepuffertem Stdout, während das Ausführen im Container basierend auf dem vertrauenswürdigen Image zu einem gepufferten Stdout führt synchrone Standardausgabe. Allerdings zeigt die Ausführung von procwrap auf einer Debian-VM ohne Docker keine Standardausgabepufferung.
Lösungsoptionen
Um dieses Problem zu lösen, können mehrere Ansätze in Betracht gezogen werden:
Letztendlich Die beste Lösung hängt von der jeweiligen Anwendung und Betriebsumgebung ab.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3