¿Separar stdout y stderr para `docker run`?

Oct 27 2020

¿Puedo obtener tuberías stdout y stderr separadas para docker run?

Ejemplo:

$ docker run --rm -it alpine sh -c 'echo this is stdout; echo this is stderr >&2' \ 2> stderr.txt this is stdout this is stderr $ cat stderr.txt

Lo que esperaría:

$ sh -c 'echo this is stdout; echo this is stderr >&2' 2> stderr.txt this is stdout $ cat stderr.txt
this is stderr

Respuestas

2 rosaroteelfe Oct 27 2020 at 19:42

El problema para ti es la opción '-t'. Después de eliminarlo, stderr debería funcionar como se esperaba:

$ docker run -i --rm alpine sh -c 'echo this is stdout; echo this is stderr >&2' 2>stderr this is stdout $ cat stderr
this is stderr

Cuando usa la opción '-t' (o --tty), stdout y stderr se unen. Esto no está documentado explícitamente en la ventana acoplable porque "Este es el comportamiento normal de un tty". [Fuente: número 25542 de moby, comentario 238647584 de bamarni ]