docker运行,docker执行和日志

如果我做 :

docker run --name nginx -d nginx:alpine /bin/sh -c 'echo "Hello stdout" > /dev/stdout' 

我可以看到“Hello stdout”:

 docker logs nginx 

但是当容器正在运行(docker run –name nginx -d nginx:alpine),我这样做:

 docker exec nginx /bin/sh -c 'echo "Hello stdout" > /dev/stdout' 

或者当我将容器连接到:

 docker exec -it nginx /bin/sh 

接着 :

 echo "Hello stdout" > /dev/stdout 

在docker日志中我看不到任何东西。 而且由于我的Nginx访问日志被redirect到/ dev / stdout,所以我也看不到它们。

这个stdout在这里发生了什么?

当你docker exec你可以看到你有几个过程

/ # ps -ef PID USER TIME COMMAND 1 root 0:00 nginx: master process nginx -g daemon off; 6 nginx 0:00 nginx: worker process 7 root 0:00 /bin/sh 17 root 0:00 ps -ef / #

在Linux中,每个进程在/ proc / pid / fd中都有自己的stdin,stdout,stderr(和其他文件描述符)

所以,与你的docker exec (pid 7),你显示的东西

的/ proc / 7 / FD / 1

而你的nginx进程(pid 1)显示他的输出

的/ proc / 1 / FD / 1