如何跟踪 docker 容器内所有子进程的所有写入调用(对 stdout/stderr)?

如何跟踪 docker 容器内所有子进程的所有写入调用(对 stdout/stderr)?

我正在运行这个命令:

strace -f -e trace=desc ./my-program

(所以你看到我正在运行-f参数)

这让我可以看到write父进程的 stdout/stderr 命令:

[pid    10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>

<stdout of ..>

<stdout other output - but I don't see the write commands - so probably from a child process>

[pid    10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>

<stdout of My final output>

我想看到的是其他写入命令。

这是在 docker 容器中运行的,执行方式为:

docker run --privileged=true my-label/my-container

我的问题是:如何跟踪 docker 容器内所有子进程的所有写入调用(对 stdout/stderr)?

编辑:请注意,此应用程序启动和停止大约需要 2 秒。strace可以遵循其申请周期。但是期望它像服务器进程一样徘徊的工具将无法工作。 (也许sysdig可以用于此 - 但我还没有看到此模型的示例)。

答案1

事实证明strace截断了字符串输出 - 你必须明确地告诉它你想要的不仅仅是前 n (10?) 个字符串字符。你用 来执行此操作-s 800

strace -s 800 -ff  ./myprogram

您还可以write通过使用strace明确询问来获取所有命令-e write

strace -s 800 -ff -e write  ./myprogram

相关内容