在Docker容器中使用gdb返回“ptrace:Operation not permitted。”

51

我在容器和主机上检查了/proc/sys/kernel/yama/ptrace_scope的值,两者都报告了零,但是当附加到pid1时,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,容器为官方发布的 CentOS 6.8 版本。


主机的dmesg输出没有任何内容?这可能被SELinux阻止了,请在这里检查:https://fedoraproject.org/wiki/Features/SELinuxDenyPtrace。 - odk
1
看起来像是 https://github.com/docker/docker/issues/21051。 - user2915097
1个回答

95

我发现答案 - 容器需要使用strace功能启动

将这个内容添加到我的docker-compose.yml文件可以让GDB正常工作

cap_add:
    - SYS_PTRACE

或者也可以通过docker命令行传递 --cap-add=SYS_PTRACE


3
当尝试使用jmap或jvisualvm获取Java程序的堆转储时,出现错误sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 1: Operation not permitted。这也与尝试获取堆转储相关。 - beerbajay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接