In Python-Anwendungen, die in getrennten Docker-Containern ausgeführt werden, kann es bei Verwendung der print-Anweisung zu einem Mangel an Ausgabe kommen. Dieses Problem tritt auf, wenn die STDOUT- und STDERR-Streams im Container gepuffert werden.
Wenn Sie eine Python-App (2.7) mit Dockers CMD [„python“, „main.py“ ausführen "], das main.py-Skript initialisiert mit print „App gestartet“ und tritt in eine Endlosschleife ein. Wenn Sie den Container mit dem Flag -it beobachten, wird die erwartete Ausgabe sowohl in den Terminal- als auch in den Docker-Protokollen angezeigt.
Die Verwendung des Flags -d (getrennter Modus) startet jedoch den Container, unterdrückt jedoch, dass die erwartete Ausgabe im sichtbar ist Protokolle oder Terminal.
Um dieses Verhalten zu beheben, kann die ungepufferte Ausgabeoption von Python verwendet werden. Durch Ändern des Dockerfile-CMD in CMD [„python“, „-u“, „main.py“] wird die Pufferung von STDOUT und STDERR deaktiviert. Dadurch kann Python sofort drucken und die Ausgabe sichtbar machen, wenn Docker-Protokolle von myapp abgefragt werden.
Das Argument -u zwingt Python, die Ausgabe in die Standard-Streams zu spülen, ohne auf eine zu warten Puffer zum Füllen. Dadurch wird sichergestellt, dass Ausdrucke zeitnah angezeigt werden, auch wenn das Skript im Hintergrund läuft.
Im Gegensatz zu Drucken wird die Funktion logging.warning("text") des Protokollierungsmoduls verwendet Erzeugt auch ohne ungepufferten Modus eine sofortige Ausgabe. Dies liegt daran, dass die Protokollierung das Leeren intern übernimmt.
In der Python-Dokumentation für die Option -u heißt es, dass sowohl STDOUT- als auch STDERR-Streams entpuffert werden, sodass die Live-Ausgabe in einem separaten Container angezeigt werden kann.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein abgetrennter Docker-Python-Container keine Druckausgabe an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!