首页 > 解决方案 > 如何为 swarm 容器启用 SYS_PTRACE

问题描述

我有一个在 Linux 上的 docker swarm 中运行的应用程序。我需要附加一个调试器(gdb),但我得到了错误:

ptrace: Operation not permitted.

研究导致我使用“cap_add”,但这对于游泳应用程序是不允许的

https://docs.docker.com/compose/compose-file/#cap_add-cap_drop

cap_add, cap_drop

添加或删除容器功能。有关完整列表,请参阅 man 7 功能。

cap_add: - 全部

cap_drop: - NET_ADMIN - SYS_ADMIN

Note: These options are ignored when deploying a stack in swarm mode with a (version 3) Compose file.

我意识到我可以使用 cap_add 手动启动容器并进行调试,但我更愿意在不必先停止应用程序的情况下进行调试。

有没有办法向集群部署的应用程序添加功能(特别是 SYS_PTRACE),以便调试器可以工作?

标签: dockerdocker-swarm

解决方案


20.10.0 版本 (2020-12-08) 中添加了对此的支持,因此您只需将“cap_add”部分添加到堆栈文件中即可。

cap_add:
  - SYS_PTRACE

此功能目前仅在发行说明和问题跟踪器中提及。

为堆栈/服务命令添加功能支持 docker/cli#2687 docker/cli#2709 moby/moby#39173 moby/moby#41249

在撰写本文时,最新的 compose 文件文档是针对 19.03 版本的,并且仍然说 swarm 不支持 cap_add/cap_drop。


推荐阅读