.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