首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在docker的容器中使用gdb

如何在docker的容器中使用gdb

作者头像
Homqyy
发布2023-03-06 13:25:20
发布2023-03-06 13:25:20
2K00
代码可运行
举报
文章被收录于专栏:知行合一知行合一
运行总次数:0
代码可运行

解决方案

话不多说,先上答案:在运行容器的时候,使用参数--cap-add sys_ptrace,比如:

代码语言:javascript
代码运行次数:0
运行
复制
docker run --cap-add sys_ptrace homqyy/example_http

问题原因

由于docker运行的容器默认是将“追踪”能力给关掉的,因此我们需要手动的打开。关于“追踪”能力的原文如下所示:

capabilities(7) — Linux manual page CAP_SYS_PTRACE * Trace arbitrary processes using ptrace(2); * apply get_robust_list(2) to arbitrary processes; * transfer data to or from the memory of arbitrary processes using process_vm_readv(2) and process_vm_writev(2); * inspect processes using kcmp(2).

触类旁通法

docker除了提供系力度的能力控制(--cap-add--cap-del)外,还提供了一个能力全开放的选项“--privileged”,因此我们可以如此排查:

  • 如果后续我们有遇到在本地开发环境正常,但在docker中却无法使用的工具或运行的程序,比如tcpdump时,不妨直接打开它,以排查是否与能力相关。
  • 如果打开全能力后就能正常使用或运行,则再根据“capabilities(7) — Linux manual page”去找对应的能力选项
  • 最后通过--cap-add来开启必须的能力即可(不推荐大家直接使用--privileged的原因是,不安全)。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月28日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案
  • 问题原因
  • 触类旁通法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档