如何为 swarm 容器启用 SYS_PTRACE

fis*_*oes 9 docker docker-swarm

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

ptrace: Operation not permitted.
Run Code Online (Sandbox Code Playgroud)

研究使我使用“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.
Run Code Online (Sandbox Code Playgroud)

我意识到我可以使用 cap_add 手动启动容器并像这样调试,但我更喜欢调试而不必先停止应用程序。

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

fis*_*oes 2

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

cap_add:
  - SYS_PTRACE
Run Code Online (Sandbox Code Playgroud)

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

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

在撰写本文时,最新的 compose 文件文档适用于版本 19.03,并且仍然表示 swarm 不支持 cap_add/cap_drop。