docker容器中的gdb返回”ptrace: Operation not permitted.”

原因

原因是Ubuntu 16.04 的/etc/sysctl.d/10-ptrace.conf文件中最后一行默认

kernel.yama.ptrace_scope = 1
这个值不允许用户使用普通账户使用attach ID连接程序进行调试,需要使用超级用户权限才能连接。

解决办法

方法一

可以把kernel.yama.ptrace_scope的值改为 0,即

sudo vim /etc/sysctl.d/10-ptrace.conf

将最后一行改为 kernel.yama.ptrace_scope = 0,保存退出。

重启系统后,普通用户就可以使用attach ID连接程序调试了。

方法二

把特权标志连接到容器上

1
docker exec --privileged -it mywebproxy_my-proxy_1 /bin/bash

方法三

容器需要使用strace功能启动

将此文件添加到我的docker-compose.yml文件允许GDB工作

1
2
cap_add:
- SYS_PTRACE

也可以在docker命令行上使用--cap-add=SYS_PTRACE传递