Docker容器安全策略需围绕最小权限、分层控制、按需启用三大逻辑组合配置:以非root用户运行(USER指令)、精细管控capabilities(--cap-drop/–cap-add)、启用seccomp过滤syscall,并辅以--read-only、--tmpfs、资源限制等加固项协同防护。

以非 root 用户运行容器
这是最基础也最有效的第一步。默认 root 运行等于把容器内进程的权限钥匙直接交给应用。
- 在 Dockerfile 中用 USER 指令指定普通用户,例如:
USER nginx或USER 1001 - 构建镜像前确保该用户存在(通过
adduser或useradd创建) - 避免使用
--user root或不设 USER —— 即使加了其他限制,root 身份仍可能绕过部分能力控制
精细控制 Linux capabilities
Capabilities 是比 root/non-root 更细粒度的权限开关。Docker 默认启用约 14 个能力,多数应用其实只需要其中 1–3 个。
- 推荐做法:先 --cap-drop=ALL 清空所有能力,再用 --cap-add 显式添加必需项
- 常见刚需举例:
--cap-add=NET_BIND_SERVICE(绑定 80/443 端口)、--cap-add=SETGID(切换组 ID) - 高危能力如
CAP_SYS_ADMIN、CAP_NET_RAW应严格禁止,除非业务明确依赖(如网络诊断工具)
启用 Seccomp 系统调用过滤
Seccomp 是运行时最后一道防线,用于拦截危险 syscall(如 ptrace、mount、reboot),防止逃逸或提权。
- Docker 默认策略较宽松,生产环境建议加载自定义 JSON 文件:
--security-opt seccomp=./seccomp.json - 策略文件必须包含
defaultAction(如"SCMP_ACT_ERRNO")和syscalls规则数组 - 典型限制:
{"names": ["ptrace", "mount", "chroot"], "action": "SCMP_ACT_KILL"}—— 直接终止违规进程 - 调试阶段可用
SCMP_ACT_LOG记录被拦截调用,再逐步收紧
补充性加固项
这些不是独立策略,而是与上述三项配合使用的“安全锚点”:
- --read-only:挂载只读根文件系统,防止恶意写入或篡改
- --tmpfs /run:size=64m:为临时目录分配内存空间,避免磁盘滥用
- --memory=512m --cpus=1.0:用 cgroups 限制资源,防 DoS 攻击
- --security-opt apparmor=my-profile:搭配 AppArmor 配置文件,实现路径级访问控制


















