docker 容器中的 gdb 返回“ptrace:不允许操作。”

问题描述 投票:0回答:2

我已经检查了容器和主机中的

/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

c++ docker centos gdb fedora
2个回答
97
投票

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

将其添加到我的 docker-compose.yml 文件中可以让 GDB 工作

cap_add:
    - SYS_PTRACE

或者也可以通过 docker 命令行传递

--cap-add=SYS_PTRACE


0
投票

除了现代 Linux 中的

--cap-add=SYS_PTRACE
之外,还需要关闭 ptrace 强化

sysctl kernel.yama.ptrace_scope=0

在 Ubuntu 上,可以在

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

中找到此设置
© www.soinside.com 2019 - 2024. All rights reserved.