最准确方式是容器内执行 capsh --print 查看当前进程能力集合,需先安装 libcap2-bin(ubuntu/debian)或 libcap(alpine);宿主机可通过 /proc/[pid]/status 读取 capeff 等字段并用 capsh --decode 解码;docker inspect 仅显示启动时配置的能力,非运行时真实状态;最终应通过系统调用测试验证能力是否真正可用。
可以直接在容器内部用 capsh --print 查看当前进程的能力集合,这是最准确、最直接的方式。
进入容器执行 capsh 查看
容器必须已安装 libcap-utils(含 capsh 工具),多数基础镜像(如 Ubuntu、Debian、Alpine)默认不带,需提前安装或使用带该工具的镜像:
- Ubuntu/Debian 容器内:运行
apt update && apt install -y libcap2-bin - Alpine 容器内:运行
apk add libcap - 然后执行:
capsh --print
输出类似:
Current: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+eip Bounding: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
其中 Current 行显示当前进程实际生效(effective)、允许(permitted)、继承(inheritable)的能力;Binding 行是能力边界集(bounding set),代表该进程及其子进程永远无法获得的能力。
通过宿主机读取容器进程的 status 文件
无需进入容器,只要知道容器主进程 PID(可通过 docker inspect -f '{{.State.Pid}}' <container></container> 获取),就能从宿主机查看其内核能力位图:
- 获取 PID:
docker inspect -f '{{.State.Pid}}' myapp→ 得到例如12345 - 查看能力位图:
cat /proc/12345/status | grep CapEff
输出形如:CapEff: 00000000a80425fb。这个十六进制值可解码为具体能力名:
-
capsh --decode=00000000a80425fb→ 显示对应能力列表
注意:此方式只反映 Effective 和 Permitted 集合的联合位图,不展示 Bounding 或 Ambient 等集合,信息不如 capsh --print 全面。
用 docker inspect 查看启动时声明的能力
docker inspect 只能查到容器创建时通过 --cap-add/--cap-drop 显式设置的能力(即 spec 中的 Linux.Capabilities 字段),不能反映运行中动态修改的能力:
-
docker inspect myapp | jq '.[0].HostConfig.CapAdd'→ 查添加项 -
docker inspect myapp | jq '.[0].HostConfig.CapDrop'→ 查丢弃项 - 若为空数组,则表示使用 Docker 默认能力集(约 14 项,不含
CAP_SYS_ADMIN等高危项)
该方式适合审计配置意图,但不是运行时真实能力的权威来源。
验证某项能力是否实际可用
光看列表不够,有时需确认能力是否真能生效。可构造轻量测试命令:
- 测
CAP_NET_BIND_SERVICE:docker exec myapp sh -c 'python3 -c "import socket; s=socket.socket(); s.bind((\"\", 80))" 2>/dev/null && echo ok || echo fail' - 测
CAP_NET_RAW:docker exec myapp ping -c1 -W1 127.0.0.1 >/dev/null && echo ok || echo fail'
这类测试绕过权限检查逻辑,直击系统调用结果,是判断能力是否真正“可用”的最终依据。











