docker - 如何为 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),以便调试器可以工作?
解决方案
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。