Разделить stdout и stderr для `docker run`?

Oct 27 2020

Могу ли я получить отдельные каналы stdout и stderr для docker run?

Пример:

$ 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

Чего я ожидал:

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

Ответы

2 rosaroteelfe Oct 27 2020 at 19:42

Проблема для вас - опция -t. После его удаления stderr должен работать должным образом:

$ 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

Когда вы используете параметр '-t' (или --tty), stdout и stderr объединяются. Это явно не задокументировано в докере, потому что «Это нормальное поведение терминала». [Источник: номер Moby 25542, комментарий 238647584 от bamarni ]