Pipe

docker run分離stdout和stderr?

  • October 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

你的問題是’-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 issue 25542,評論 238647584 by bamarni ]

引用自:https://unix.stackexchange.com/questions/616616