docker容器中的gdb返回"ptrace:不允许操作".

Adr*_*ian 27 c++ gdb centos fedora docker

我已经检查/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.
Run Code Online (Sandbox Code Playgroud)

我也尝试使用特权标志附加到容器

docker exec --privileged -it mywebproxy_my-proxy_1 /bin/bash
Run Code Online (Sandbox Code Playgroud)

主机操作系统是Fedora 25,其寄存器来自他们的存储库,容器是官方centos6.8

Adr*_*ian 47

我发现了答案 - 容器需要以strace功能启动

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

cap_add:
    - SYS_PTRACE
Run Code Online (Sandbox Code Playgroud)

或者它也可以在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 时,这也很重要: 操作不允许`作为错误 (2认同)