如何将非pid 1进程的日志重定向到dockerlogs,最终目标是将它们重定向到gelf?
docker 容器内有 2 个进程:
1) pid 1进程
2) 非 pid 1 进程写入路径的日志文件
已关注 docker docs 具体来说
The official nginx image creates a symbolic link from /dev/stdout to /var/log/nginx/access.log, and creates another symbolic link from /dev/stderr to /var/log/nginx/error.log, overwriting the log files and causing logs to be sent to the relevant special device instead.
没有帮助。 仅pid 1进程日志被重定向到dockerlogs
执行的步骤:
1ln -sf/dev/stdout _path_
Dockerfile
2 将更新后的镜像作为容器运行。
3 docker log -f _containerid_
仅显示pid 1进程的日志
有another official docker source
哪些州
Docker supports different logging drivers used to store and/or stream container stdout and stderr logs of the main container process (pid 1)
所以这可能是看不到非pid 1进程日志的原因。
尽管如此,仍然不明白为什么 ln -sf/dev/stdout/var/log/mysql/error.log 创建的符号链接(symbolic link)不起作用。
最佳答案
我对这个主题有同样的问题。我解决这个问题的方法是,您需要在 Docker 构建(Dockerfile)期间 docker 运行时而不启动“ln -s”。
这是我的 shell bash 脚本
tail -n 0 -q -F /path/folder/*.log >> /proc/1/fd/1 &
希望有帮助
关于docker - 将非 pid 1 进程的输出重定向到 docker 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47749311/