最轻量实时的方式是用 docker inspect --format 提取 SecurityOpt 和 CapAdd 字段做结构化比对,无需进容器或额外工具;三类关键字段为 CapAdd、CapDrop 和 SecurityOpt,均以字符串数组形式存在,可直接输出比对并筛查高危项如 seccomp=unconfined、apparmor=unconfined 或 CAP_SYS_ADMIN。

直接用 docker inspect --format 提取容器的 SecurityOpt 和 CapAdd 字段,再做结构化比对,是最轻量、最实时的方式。不需要进容器、不依赖额外工具,一条命令就能看出权限配置是否偏离基线。
提取并对比安全上下文数组
容器运行时权限差异主要体现在三类字段:启用的 Capabilities(HostConfig.CapAdd)、禁用的能力(HostConfig.CapDrop)、以及安全选项(HostConfig.SecurityOpt)。这些都以字符串数组形式存在,适合直接输出比对:
- 查看当前容器启用的所有额外能力:
docker inspect --format='{{.HostConfig.CapAdd}}' my-app - 查看被显式禁用的能力:
docker inspect --format='{{.HostConfig.CapDrop}}' my-app - 提取所有安全策略项(含 seccomp、apparmor、label):
docker inspect --format='{{.HostConfig.SecurityOpt}}' my-app
快速识别高危配置项
有些值一旦出现就代表风险显著上升,可结合 grep 实时筛查:
-
no-new-privileges=false或缺失该设置 → 容器内进程可能提权
(需从SecurityOpt中手动判断,inspect 不单独暴露布尔值) -
seccomp=unconfined→ 完全关闭系统调用过滤 -
apparmor=unconfined或空值 → AppArmor 策略未生效 -
CAP_SYS_ADMIN出现在CapAdd中 → 高权限能力被显式授予
跨容器批量比对权限差异
用 shell 循环+格式化输出,能直观发现异常容器:
- 列出所有运行中容器的 CapAdd 和 SecurityOpt:
for c in $(docker ps -q); do echo "== $(docker ps -f id=$c --format '{{.Names}}') =="; docker inspect --format='CapAdd: {{.HostConfig.CapAdd}}, SecurityOpt: {{.HostConfig.SecurityOpt}}' $c; done - 筛选出启用了
CAP_SYS_ADMIN的容器:docker ps -q | xargs -I{} sh -c 'docker inspect --format=\"{{.Name}} {{.HostConfig.CapAdd}}\" {}' | grep CAP_SYS_ADMIN
与基线配置做自动化校验
把标准配置存为 JSON 或文本,用 diff 或简单字符串匹配做校验:
- 导出某“黄金容器”的安全配置作为基准:
docker inspect --format='{{.HostConfig.CapAdd}} {{.HostConfig.CapDrop}} {{.HostConfig.SecurityOpt}}' gold-container > baseline.txt - 检查新容器是否一致:
docker inspect --format='{{.HostConfig.CapAdd}} {{.HostConfig.CapDrop}} {{.HostConfig.SecurityOpt}}' new-container | diff baseline.txt -


















