Stdout Buffering dans les conteneurs Docker : un cas de Debian contre Ubuntu
Lors de l'exécution de code dans un conteneur Docker, la mise en mémoire tampon stdout peut se produire dans certains cas mais pas dans d’autres. Ce problème est observé dans un scénario où stdout est dirigé à la fois vers la console et un fichier journal à l'aide d'un io.MultiWriter.
Cause première : différences de plate-forme
La racine La cause de ce comportement réside dans les différences de plate-forme entre les images basées sur Debian et les images basées sur Ubuntu. Debian semble mettre en mémoire tampon la sortie standard par défaut, tandis qu'Ubuntu gère la sortie standard de manière synchrone.
Démonstration avec les fichiers Docker
Cela peut être illustré à l'aide de deux fichiers Docker, un basé sur Debian:wheezy et l'autre sur 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)
L'exécution de procwrap dans le conteneur basé sur l'image Wheeze entraîne une sortie standard mise en mémoire tampon, tandis que son exécution dans le conteneur basé sur l'image de confiance entraîne une sortie standard synchrone. Cependant, l'exécution de procwrap sur une machine virtuelle Debian sans Docker ne présente pas de mise en mémoire tampon stdout.
Options de résolution
Pour résoudre ce problème, plusieurs approches peuvent être envisagées :
En fin de compte , la meilleure solution dépend de l'application spécifique et de l'environnement d'exploitation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!