我已经检查了容器和主机中的
/proc/sys/kernel/yama/ptrace_scope
- 两者都将值报告为零,但当附加到 pid 时,gdb 报告
Reading symbols from /opt/my-web-proxy/bin/my-web-proxy...done.
Attaching to program: /opt/my-web-proxy/bin/my-web-proxy, process 1
ptrace: Operation not permitted.
我还尝试使用特权标志附加到容器
docker exec --privileged -it mywebproxy_my-proxy_1 /bin/bash
主机操作系统是 Fedora 25,带有来自其存储库的 docker,容器是官方的 centos6.8
我发现了答案 - 容器需要使用 strace 功能启动
将其添加到我的 docker-compose.yml 文件中可以让 GDB 工作
cap_add:
- SYS_PTRACE
或者也可以通过 docker 命令行传递
--cap-add=SYS_PTRACE
除了现代 Linux 中的
--cap-add=SYS_PTRACE
之外,还需要关闭 ptrace 强化。
sysctl kernel.yama.ptrace_scope=0
在 Ubuntu 上,可以在
/etc/sysctl.d/10-ptrace.conf
中找到此设置