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