如何通过 strace 追踪 docker 客户端执行命令后, docker 服务端对应的进程的系统调用?

2023-08-15 22:20:44 +08:00
 zhoudaiyu
比如执行 通过 docker run -itd alpine 启动容器到 容器启动成功这一段时间,我想通过 strace 追踪到后台进程如 dockerd containerd containerd-shim 等,但是又不想追踪到和这次操作无关的其他 docker 服务端进程。请问这个如何实现呢?
429 次点击
所在节点    问与答
2 条回复
huntagain2008
2023-08-16 10:01:56 +08:00
小白将这个问题输入到 poe.com 的 GPT-4 得到 strace 的用法,最后两段指出需要你自己分析过滤输出。推荐 sysdig 工具。由于 GPT-4 没有回答次数,我再次询问 Claude-2-100k ,得到 sysdig 的用法介绍,但是是否符合要求,就不清楚了。

对追踪 docker 服务端进程的系统调用,可以使用 sysdig 工具来实现。具体步骤如下:
1. 安装 sysdig 工具。在 Linux 系统上通常可以通过包管理器安装,如 apt-get install sysdig 。
2. 运行 docker 命令,例如:docker run -itd alpine 。记下这个容器的容器 ID 。
3. 使用 sysdig 的 filter 功能指定追踪的进程。例如追踪 dockerd 进程:

sysdig -p "%container.id" proc.name=dockerd
4. 同时可以添加过滤条件,只追踪与特定容器 ID 相关的系统调用:

sysdig -p "%container.id" proc.name=dockerd and container.id=<容器 ID>
5. 也可以追踪其他进程,如 containerd:

sysdig -p "%container.id" proc.name=containerd and container.id=<容器 ID>
6. 查看输出,可以看到执行 docker 命令后,docker 服务端进程的系统调用信息,包括参数、返回值等。
7. 通过添加各种 filter,可以非常精确地追踪到所需的系统调用信息。
这样就可以使用 sysdig 有选择性地追踪 docker 服务端进程的系统调用,分析 docker 执行流程和性能问题。
julyclyde
2023-08-17 13:19:50 +08:00
你的 strace 需要挂在 dockerd 主进程上,并-f

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965609

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX