docker 容器中的 gdb 返回“ptrace:不允许操作”。
Posted
技术标签:
【中文标题】docker 容器中的 gdb 返回“ptrace:不允许操作”。【英文标题】:gdb in docker container returns "ptrace: Operation not permitted." 【发布时间】:2017-06-21 03:42:41 【问题描述】:我在容器和主机上检查了/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,带有来自其 repos 的 docker,容器是官方的 centos6.8
【问题讨论】:
主机 dmesg 输出中没有任何内容?它可能被 SELinux 阻止,请查看:fedoraproject.org/wiki/Features/SELinuxDenyPtrace 看起来像github.com/docker/docker/issues/21051 【参考方案1】:我找到了答案——容器需要以 strace 功能启动
将它添加到我的 docker-compose.yml 文件允许 GDB 工作
cap_add:
- SYS_PTRACE
或者也可以在docker命令行上用--cap-add=SYS_PTRACE
传递
【讨论】:
这在尝试使用 jmap 或 jvisualvm 为 java 程序进行堆转储并获得sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted
作为错误时也相关以上是关于docker 容器中的 gdb 返回“ptrace:不允许操作”。的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Amazon Linux 2、单容器、无 Docker Compose 在 AWS Elastic Beanstalk 上获取 SYS_PTRACE