
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 が関連付けられます。これは「ttyの通常の動作です」とdockerに明示的に文書化されていません。 [源泉:moby質問25542、bamarniでコメント238647584]