Standardpufferung in Docker-Containern
Problem:
Ein Prozess wird in einem Docker-Container ausgeführt kann zu einer gepufferten stdout-Ausgabe führen, anders als wenn der Prozess auf dem Host oder unter macOS ausgeführt wird. Dieses inkonsistente Verhalten wird bei der Verwendung von Go 1.6.3 beobachtet und macht sich besonders in Containern bemerkbar, die auf Debian-Images basieren.
Analyse:
Das Problem liegt im Standardpufferungsverhalten des Behälters. Standardmäßig wird stdout in Docker-Containern gepuffert, was bedeutet, dass die Ausgabe gesammelt wird, bis ein bestimmtes Limit erreicht ist oder ein Flush ausgelöst wird. Dies kann zu intermittierender Ausgabe führen, wenn Prozesse ausgeführt werden, die große Datenmengen generieren.
Ursache:
Die Standardausgabepufferung ist eine Linux-Kernel-Funktion, die von Docker geerbt wird Behälter. Es optimiert die Systemleistung, indem es die Anzahl der Schreibvorgänge in das Host-Dateisystem reduziert.
Lösung:
Es gibt mehrere Möglichkeiten, die Standardausgabepufferung in Docker-Containern zu überwinden:
Beispiel:
Im bereitgestellten Beispiel kann das folgende Code-Snippet sein Wird verwendet, um die Standardausgabepufferung zu deaktivieren:
<code class="go">cmd := exec.Command("ping", "127.0.0.1") cmd.Stdout = io.MultiWriter(os.Stdout, logWriter) cmd.Env = append(os.Environ(), "unbuffer=true") err := cmd.Run()</code>
Das obige ist der detaillierte Inhalt vonWarum kommt es in Docker-Containern zu Stdout-Pufferung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!