docker run,docker exec和logs

时间:2017-03-22 17:34:06

标签: nginx docker alpine

如果我这样做:

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

我可以看到"你好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访问日志被重定向到/ dev / stdout,我也看不到它们。

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

1 个答案:

答案 0 :(得分:1)

当您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中,每个进程都有自己的stdin,stdout,stderr(和其他文件描述符),在/ proc / pid / fd

等等,使用您的docker exec(pid 7),您可以在

中显示内容

的/ proc / 7 / FD / 1

当你的nginx进程(pid 1)在

中显示他的输出

的/ proc / 1 / FD / 1