.NET抓包

假设要分析的docker容器名称为:websiteapp



进入 docker

docker exec -it websiteapp bash



进入 .net 目录

cd /usr/share/dotnet/shared/Microsoft.NETCore.App/6.0.5/
## 后面的 6.0.5 是 dotnet 的版本号,如果不确定是哪个版本,可以用 ls 查看



运行 createdump 抓包

createdump 命令行用法

createdump [options] pid
-f, --name - dump path and file name. The default is '/tmp/coredump.%p'. These specifiers are substituted with following values:
   %p  PID of dumped process.
   %e  The process executable filename.
   %h  Hostname return by gethostname().
   %t  Time of dump, expressed as seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
-n, --normal - create minidump.
-h, --withheap - create minidump with heap (default).
-t, --triage - create triage minidump.
-u, --full - create full core dump.
-d, --diag - enable diagnostic messages.

执行命令抓包

./createdump  -f /tmp/websiteapp_dump_n -u  1

参数说明:

  • 最后面的 1 表示 pid ,一般就是 1
  • dump_n,后面的n表示执行序号,有可能需要多次抓包,所以用序号来分开

此时会在容器内生产一个临时文件 /tmp/websiteapp_dump_n



注意:如果提示没有权限,需要在docker运行时增加一个参数 --privileged=true ,以便容器以特权方式运行。
完整示例如下

docker run -d   --name websiteapp  -p 8206:80 -m512m  \
 --privileged=true \
 -e ASPNETCORE_ENVIRONMENT=Development \
 -v /etc/hosts:/etc/hosts \
 -v $PWD/publish:/app \
 -v $PWD/logs:/app/Logs \
 -v $PWD/temp:/app/temp \
 -v $PWD/temp:/app/tmp  \
nebula/websiteapp:latest



将dump文件从容器拷贝出来

在【容器外面】运行下面命令:

docker cp websiteapp:/tmp/websiteapp_dump_1  /root/dumps/

文件拷贝出来后,可以删除这个文件



如果docker运行在K8S中,可以在 LENS 中运行下面的命令将文件拷贝出来

zip  websiteapp_dump1.zip  websiteapp_dump1
kubectl.exe cp  yunwei/notifyapp-release-8478b8b47c-gszbc:/tmp/websiteapp_dump1.zip   d:/localfiles/websiteapp_dump1.zip

命令格式

kubectl.exe cp  namespace/pod-id:/file_path_in_docker   save_to_local_path