将“docker run”的标准输出和标准错误分开?

将“docker run”的标准输出和标准错误分开?

我可以获得单独的 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

答案1

您的问题是“-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 将连接在一起。这在 docker 中没有明确记录,因为“这是 tty 的正常行为”。 [来源:moby 问题 25542,评论 238647584 by bamarni]

相关内容