Docker默认启用Seccomp策略,禁用约40–51个高危系统调用(如ptrace、mount、chroot);可通过--security-opt seccomp=加载自定义JSON策略,验证方式为cat /proc/self/status | grep Seccomp返回2即生效,且策略需适配应用实际系统调用需求。

直接用 docker run 加上 --security-opt seccomp= 参数就能创建带 Seccomp 的容器。关键不是“能不能加”,而是加什么策略、怎么验证生效、以及策略是否适配你的应用。
怎么指定 Seccomp 策略
Docker 支持两种方式加载 Seccomp 规则:
使用内置默认策略(推荐初试)
不加任何参数时,Docker 自动启用默认策略(禁用约 40–51 个高危系统调用,如ptrace、mount、chroot)。
这已比--security-opt seccomp=unconfined安全得多。-
加载自定义 JSON 策略文件
先准备一个合法的.json文件(比如jupyter-seccomp.json),再通过路径引用:docker run -it --rm \ --security-opt seccomp=./jupyter-seccomp.json \ quay.io/jupyter/scipy-notebook:2025-12-31
自定义策略怎么写才有效
一个最小可用的白名单策略示例(defaultAction 设为拒绝,只放行必需调用):
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": ["SCMP_ARCH_X86_64"],
"syscalls": [
{"names": ["read", "write", "openat", "close"], "action": "SCMP_ACT_ALLOW"},
{"names": ["execve"], "action": "SCMP_ACT_ALLOW"},
{"names": ["getpid", "getuid", "uname"], "action": "SCMP_ACT_ALLOW"}
]
}⚠️ 注意:
-
SCMP_ACT_ERRNO表示拒绝并返回错误(应用通常能继续运行);SCMP_ACT_KILL会直接终止进程,慎用。 -
execve几乎所有应用都需要,漏掉会导致Permission denied启动失败。 - 如果应用报
Operation not permitted,大概率是缺了某个系统调用,可临时改defaultAction为SCMP_ACT_LOG(需内核开启CONFIG_SECCOMP_FILTER=y和CONFIG_AUDIT=y),再查/var/log/audit/audit.log或dmesg定位缺失项。
怎么确认 Seccomp 生效了
进容器后执行:
cat /proc/self/status | grep Seccomp
- 输出
Seccomp: 2→ 表示 Filter 模式(即启用了自定义或默认策略) - 输出
Seccomp: 0→ 表示未启用(可能用了unconfined或宿主机不支持) - 还可运行
docker inspect <容器ID>,搜索"Seccomp"字段,看是否指向具体文件路径或显示RuntimeDefault
常见踩坑提醒
- 策略文件路径必须是宿主机上的绝对路径或相对于当前工作目录的相对路径,不能是容器内的路径。
- Docker Desktop(macOS/Windows)默认支持 Seccomp,但 WSL2 下需确认内核配置(
zgrep CONFIG_SECCOMP /proc/config.gz或grep SECCOMP /boot/config-$(uname -r))。 - Jupyter、Node.js、Python 应用通常不需要
ptrace或mount,但某些调试工具(如gdb)、动态链接器或构建流程可能依赖mmap、mprotect,需按需放开。 - 不建议全局禁用 Seccomp(即
--security-opt seccomp=unconfined),尤其在生产环境。
不复杂但容易忽略细节。策略越细粒度,安全水位越高,但也越需要配合日志和测试来迭代。

















