/dev/stdout' 当我这样做时-6ren">
gpt4 book ai didi

nginx - docker run、docker exec 和日志

转载 作者:行者123 更新时间:2023-12-04 15:40:22 25 4
gpt4 key购买 nike

如果我做 :

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 访问日志被重定向到/dev/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
如果你这样做 ls -ltr /proc/7/fd/1 ,它显示类似 /proc/4608/fd/1 -> /dev/pts/2这意味着输出正在发送到终端
而你的 nginx 进程(pid 1)显示他的输出
/proc/1/fd/1
如果你这样做 ls -ltr /proc/1/fd/1 ,它会显示类似 /proc/1/fd/1 -> pipe:[184442508] 的内容这意味着输出正在发送到 docker 日志驱动程序

关于nginx - docker run、docker exec 和日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42958854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com