Linux – stdout/stderr
下面是一个日志输出到/dev/stdout,然后 /dev/stdout 描述符的所有内容都会发送到 /proc/self/fd/1,而 /proc/self/fd/1 又会发送到 /dev/pts/0,即我们的控制台,而不是发送到 Docker 容器的 STDOUT 和 分别不会到达 Docker 守护程序,后者会将日志放在主机上。
因此,当使用 tty (即登录容器的时候)连接到 pod 时,所有通道都指向它。我理解就是logs -f可以看到你在tty时输入的命令等。
bash-5.0$ echo message > /dev/stderr
message
bash-5.0$ echo message > /dev/stdout
message
bash-5.0$ ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 Feb 13 15:56 /dev/stdout -> /proc/self/fd/1
bash-5.0$ ls -l /dev/stderr
lrwxrwxrwx 1 root root 15 Feb 13 15:56 /dev/stderr -> /proc/self/fd/2
bash-5.0$ ls -l /proc/self/fd/1
lrwx------ 1 nobody nobody 64 Feb 17 12:31 /proc/self/fd/1 -> /dev/pts/0
bash-5.0$ ls -l /proc/self/fd/2
lrwx------ 1 nobody nobody 64 Feb 17 12:31 /proc/self/fd/2 -> /dev/pts/0
类似情况
所以如果想要把容器中脚本执行的结果能够输出到docker logs -f。 链接/dev/stdout的时候要用/proc/self/fd/1
https://rtfm.co.ua/linux-php-fpm-docker-stdout-i-stderr-net-logov-prilozheniya/