V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhoudaiyu
V2EX  ›  问与答

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

  •  
  •   zhoudaiyu · 2023-08-15 22:20:44 +08:00 via iPhone · 468 次点击
    这是一个创建于 500 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如执行 通过 docker run -itd alpine 启动容器到 容器启动成功这一段时间,我想通过 strace 追踪到后台进程如 dockerd containerd containerd-shim 等,但是又不想追踪到和这次操作无关的其他 docker 服务端进程。请问这个如何实现呢?
    2 条回复    2023-08-17 13:19:50 +08:00
    huntagain2008
        1
    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
        2
    julyclyde  
       2023-08-17 13:19:50 +08:00
    你的 strace 需要挂在 dockerd 主进程上,并-f
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   952 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:14 · PVG 04:14 · LAX 12:14 · JFK 15:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.