Si lo hago :
docker run --name nginx -d nginx:alpine /bin/sh -c 'echo "Hello stdout" > /dev/stdout'Puedo ver "Hello stdout" cuando lo hago:
docker logs nginxPero cuando el contenedor se está ejecutando (docker run --name nginx -d nginx:alpine) y hago:
docker exec nginx /bin/sh -c 'echo "Hello stdout" > /dev/stdout'o cuando adjunto el contenedor con:
docker exec -it nginx /bin/shy entonces :
echo "Hello stdout" > /dev/stdoutNo puedo ver nada en los registros de la ventana acoplable. Y dado que mis registros de acceso de Nginx se redirigen a /dev/stdout, tampoco puedo verlos.
¿Qué está pasando aquí con este stdout?
Cuando docker exec puede ver que tiene varios procesos
/ # ps -ef PID USER TIME COMMAND 1 root 0:00 nginx: master process nginx -g daemon off; 6 nginx 0:00 nginx: worker process 7 root 0:00 /bin/sh 17 root 0:00 ps -ef / #y en Linux, cada proceso tiene su propio stdin, stdout, stderr (y otros descriptores de archivo), en /proc/pid/fd
y así, con su docker exec (pid 7) muestra algo en
/proc/7/fd/1
Si hace ls -ltr /proc/7/fd/1 , muestra algo como /proc/4608/fd/1 -> /dev/pts/2 lo que significa que la salida se envía a la terminal
mientras su proceso nginx (pid 1) muestra su salida en
/proc/1/fd/1
Si hace ls -ltr /proc/1/fd/1 , muestra algo como /proc/1/fd/1 -> pipe:[184442508] lo que significa que la salida se envía al controlador de registro de Docker