当 运行 在 docker 容器中时,`strace -f` 的工作方式是否不同?
Does `strace -f` work differently when run inside a docker container?
假设如下:
- 我在 docker 容器中有一个程序
myprogram
我正在 运行 将 docker 容器与
docker run --privileged=true my-label/my-container
在容器内 - 程序正在 运行 中:
strace -f -e trace=desc ./myprogram
我看到的是 strace
(尽管 -f
处于开启状态)并未遵循所有子进程。
我从 strace
看到以下输出
[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>
我想看的是其他write
命令。
现在我应该看到其他 write
命令 - 因为我正在使用 -f
。
我认为正在发生的事情是 运行ning inside docker 使进程处理和安全性不同。
我的问题是:当 运行 在 docker 容器中时,strace -f
的工作方式是否不同?
请注意,此应用程序在 2 秒内启动和停止 - 因此跟踪工具必须遵循应用程序生命周期 - 就像 strace
一样。连接到服务器后台进程将不起作用。
事实证明 strace
截断字符串输出 - 您必须明确地告诉它您想要的不仅仅是前 n(10?)个字符串字符。您使用 -s 800
执行此操作。
strace -s 800 -ff ./myprogram
您还可以通过使用 -e write
明确询问 strace
来获取所有 write
命令。
strace -s 800 -ff -e write ./myprogram
假设如下:
- 我在 docker 容器中有一个程序
myprogram
我正在 运行 将 docker 容器与
docker run --privileged=true my-label/my-container
在容器内 - 程序正在 运行 中:
strace -f -e trace=desc ./myprogram
我看到的是 strace
(尽管 -f
处于开启状态)并未遵循所有子进程。
我从 strace
[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>
我想看的是其他write
命令。
现在我应该看到其他 write
命令 - 因为我正在使用 -f
。
我认为正在发生的事情是 运行ning inside docker 使进程处理和安全性不同。
我的问题是:当 运行 在 docker 容器中时,strace -f
的工作方式是否不同?
请注意,此应用程序在 2 秒内启动和停止 - 因此跟踪工具必须遵循应用程序生命周期 - 就像 strace
一样。连接到服务器后台进程将不起作用。
事实证明 strace
截断字符串输出 - 您必须明确地告诉它您想要的不仅仅是前 n(10?)个字符串字符。您使用 -s 800
执行此操作。
strace -s 800 -ff ./myprogram
您还可以通过使用 -e write
明确询问 strace
来获取所有 write
命令。
strace -s 800 -ff -e write ./myprogram