我在docker容器中有一个长时间运行的进程,我想附加gdb来查看正在运行的线程并获取stacktraces.我可以从主机附加到进程,但是我无法解析任何符号,因为可执行文件位于文件系统中的不同位置(它位于装载器的卷中)并且共享系统库全部停留在docker文件系统映像中在/ var/lib/docker中的某个地方.
我能够生成一个核心文件并使用gdb通过指定主机的可执行文件路径来查看它,但由于系统库都在错误的位置并且被加载到corefile中的错误位置,我得不到来自那里的信息.
我有任何我忽略的选择吗?
Jir*_*iri 14
您可以gdb通过lxc-attach连接到正在运行的容器,在容器中运行实例来附加到进程.
注意:必须已在该容器中安装gdb,否则必须安装它.
# find your container ID
sudo docker ps
# list of your containers - container ID is 1234567890
# find your full container ID
sudo docker ps --no-trunc -q| grep <short ID>
sudo lxc-attach -n <container long ID>
root@1234567890:/#
# optionally, you can install gdb now if it is not installed
# yum install gdb
root@1234567890:/# gdb
...
(gdb) attach 1
Run Code Online (Sandbox Code Playgroud)
更新2017-04:
现在可以使用docker exec更简单的工作流程(感谢@ 42n4).
# find your container ID
sudo docker ps
# list of your containers - container ID is 1234567890
docker exec -i -t 1234567890 /bin/bash
root@1234567890:/#
# optionally, you can install gdb now if it is not installed
# yum install gdb
root@1234567890:/# gdb
...
(gdb) attach 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9736 次 |
| 最近记录: |