Docker Seccomp自定义规则需以白名单为核心,严格使用标准JSON字段(default_action、architectures、syscalls),设default_action为SCMP_ACT_ERRNO或SCMP_ACT_KILL,仅放行应用真实所需的系统调用,并通过绝对路径加载、jq校验语法、/proc/self/status确认生效及strace测试拦截效果来确保策略正确执行。
要在Docker中用Seccomp自定义规则集严格限制非必要系统调用,核心是构建一个以白名单为基础、动作明确、路径合规、经实测验证的JSON策略文件,并确保它被Docker daemon正确加载。不能只靠“禁止高危调用”,而要从“只放行必需项”出发。
写对JSON结构和字段名
Seccomp配置必须是标准JSON,且字段名大小写敏感,缺一不可:
default_action
(不是 defaultAction 或 defaultAction):设为
(默认拒绝并报错)或更严格的
(直接终止进程)
architectures
(不是 architecture):必须包含宿主机架构,例如
;多架构部署需补全
等
syscalls
(不是 syscall 或 syscalls_list):是一个对象数组,每个元素含
(单个调用)或
(多个调用批量声明)和
常见错误:手写时把
写成
,或把
拼错为
,会导致容器启动失败并提示
。
按运行时语言保留最小必要调用集
盲目禁用会卡死容器——比如禁掉
,Go 程序连自身二进制路径都读不到,直接 panic;Node.js 会因无法初始化 epoll 实例而无法启动 HTTP 服务。
通用基础调用(几乎必留)
:
、
、
、
、
、
、
、
、
、
Go 容器额外需要
:
(启用 CGO 时创建线程)、
、
、
Node.js 容器额外需要
:
、
、
、
若需调试或日志采集,谨慎放开
:
(加密随机数)、
(获取内核信息),但避免
、
、
、
建议先用
在测试容器中抓取真实调用,再筛出实际使用的子集,而非照搬网上精简模板。
Docker Sandbox
创建并管理 Docker 沙箱虚拟机环境以安全执行代理。适用于运行不受信任代码、探索包或隔离代理工作负载。支持 Claude、Codex、Copilot、Gemini 和 Kiro 代理,并提供网络代理控制。
下载
路径与权限必须由 daemon 视角确认
Docker daemon 运行在宿主机 root 上下文,它不认你的当前 shell 路径:
配置文件必须使用
绝对路径
,如
;
或
会被忽略
执行命令时也必须写全路径:
确保 daemon 用户(通常是
)有读权限:
可用
快速校验 JSON 语法是否合法
验证规则是否真正生效
仅看容器能启动不等于策略起作用。需分层验证:
进容器后执行
:返回值为
表示已加载 Filter 模式
测试
是否被 kill:
;若输出含
或立即退出,说明
生效;若只是
,说明仍为
检查是否被绕过:确认未使用
、
或
启动,这些会完全跳过 Seccomp
不复杂但容易忽略。
SCMP_ACT_ERRNOSCMP_ACT_KILL["SCMP_ARCH_X86_64"]SCMP_ARCH_AARCH64"name""names""action"default_actiondefaultActionsyscallssyscallunknown field "syscall"openatopenatreadwriteclosestatxfstatlseekgetpidgetuidclock_gettimecloneepoll_waitepoll_ctlepoll_create1epoll_waitepoll_ctlepoll_pwaiteventfd2getrandomunameptracemountchrootrebootstrace -f -e trace=raw_syscall -p $(pidof app)/etc/docker/seccomp-restrict.json./profile.json~/seccomp.jsondocker run --security-opt seccomp=/etc/docker/seccomp-restrict.json nginx:alpinerootsudo chmod 644 /etc/docker/seccomp-restrict.jsonjq -n -f /etc/docker/seccomp-restrict.json >/dev/nullcat /proc/self/status | grep Seccomp2ptraceecho $$ && strace -p $$ 2>&1 | head -n1SIGKILLSCMP_ACT_KILLOperation not permittedSCMP_ACT_ERRNO--privileged--cap-add=SYS_PTRACE--security-opt seccomp=unconfined