抓包工具链61 条

容器内抓包方法

容器共享宿主网卡或独立 netns:独立网络时要在容器命名空间内抓,或从宿主按 veth 对端抓;容器里往往没有 tcpdump 需临时安装。

容器内怎么抓包

容器抓包的关键是搞清它用的是哪一套网络命名空间。共享宿主网络栈的容器直接在宿主接口上抓即可;使用独立网络命名空间的容器,必须在它的命名空间内抓,或者从宿主侧对应的虚拟接口对端抓。容器镜像里通常没有抓包工具,临时安装会改变运行环境且受镜像源限制,因此更稳妥的做法是进入命名空间后用宿主已有的工具执行。这样既不改动镜像,也不影响业务进程的运行环境。

基本信息

网络形态共享宿主网络栈,或使用独立网络命名空间
抓包入口进入容器命名空间,或从宿主侧对端接口抓取
工具来源优先使用宿主已安装的抓包工具
权限要求需要相应特权或系统能力
主要风险在运行容器内安装软件会改变运行环境

典型使用场景

  • 容器内服务排障:确认容器侧真实的收发情况
  • 与宿主侧对照:比较宿主接口与容器命名空间内看到的差异
  • 编排环境定位:确认流量实际经过哪个接口
  • 临时诊断:在不修改业务镜像的前提下完成采集
  • 清理确认:抓包结束后确认临时进程与文件都已回收

采集方式

采集方式
# 方式一:进入容器网络命名空间,用宿主提供的抓包工具执行
# 方式二:在宿主侧找到对应的虚拟接口对端,直接在宿主上抓
# 容器重建后命名空间会变化,需要重新定位
# 采集文件写入宿主目录,便于回传与清理

网络形态与抓包入口

形态抓包位置注意
共享宿主网络栈宿主接口与宿主其他流量混在一起
独立命名空间容器命名空间内工具需由宿主提供
宿主对端接口宿主侧虚拟接口需确认接口的配对关系
容器重建后进程号与网络命名空间都会变化,长时间任务要记录容器标识而不是进程号,否则中途就会失效。
在运行中的容器里安装抓包工具会改变运行环境,生产环境优先从宿主侧抓取,避免对业务产生额外影响。

易错点

  • 只在宿主接口抓包会漏掉容器命名空间内部的差异,抓包点必须先确认网络命名空间归属
  • 容器重建后进程号与命名空间都变化,脚本里写死进程号会导致任务中途失效
  • 在生产容器内临时安装抓包工具会改变运行环境,可能引入依赖冲突,优先使用宿主已有的工具
  • 抓包结束后不清理临时进程与落盘文件,会持续占用磁盘并扩大权限面

数据来源与参考

  • docker/nsenter 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌