ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Cairn容器化架构详解:每项目一容器的隔离策略与生命周期管理完整指南

Cairn容器化架构详解:每项目一容器的隔离策略与生命周期管理完整指南 Cairn容器化架构详解每项目一容器的隔离策略与生命周期管理完整指南【免费下载链接】CairnA AI general-purpose state-space search engine, validated first on autonomous penetration testing.项目地址: https://gitcode.com/gh_mirrors/cairn2/CairnCairn 是一个通用 AI 状态空间搜索引擎也是首个在自主渗透测试场景下得到验证的 AI 智能体引擎。它的核心设计之一是每项目一个容器Per-Project Container的隔离策略每个任务项目独享一个 Worker 容器Dispatcher 负责容器的创建、复用与回收实现完整的容器生命周期管理。本文带你快速理解这套架构的隔离逻辑与生命周期流转。为什么需要每项目一容器的隔离策略Cairn 把渗透测试、CTF、漏洞研究等问题抽象为从 origin 到 goal 的有向搜索Worker 智能体不断执行 Bootstrap / Reason / Explore 三类任务在未知状态空间中寻找路径。在这种模式下隔离是刚需环境隔离不同项目可能针对完全不同的目标不同 IP、不同系统彼此的文件、凭证、工具状态不能互相污染安全边界容器内的 Kali 工具链nuclei、dalfox、katana 等具备真实攻击能力项目间隔离可避免误伤与越权资源可控容器可随时停止、删除调度器按项目粒度精确管控资源一句话总结Server 只管图谱一致性Dispatcher 只管调度与容器Worker 只收 prompt 并返回结构化输出——三者职责清晰互不越界。系统架构三个角色如何协作Cairn Server ──(图谱读写 API)── Dispatcher ──(docker exec)── Worker 容器(项目A/B…)Cairn Server维护 Fact / Intent / Hint 黑板图谱保证数据一致性运行在 docker-compose.yaml 定义的cairn-server服务中端口 8000Cairn Dispatcher读取图谱、调度任务、创建并销毁 Worker 容器是协议的唯一写入者。它通过挂载宿主机的 Docker Socket 直接操作容器见 docker-compose.yaml 中的/var/run/docker.sock挂载Worker 容器每个项目一个容器内可并发运行多个 Agent WorkerClaude Code / Codex / Pi彼此共享同一项目环境关键洞察容器是项目级的不是任务级的。同一项目的 Bootstrap、Reason、Explore 任务全部 exec 进同一个容器工作区、安装的依赖、下载的文件自然延续无需反复重建环境。Worker 容器镜像一个开箱即用的渗透测试工具箱Worker 镜像定义在 container/Dockerfile构建思路值得参考基础镜像为kalilinux/kali-rolling安装 kali-linux-headless 全套工具预装主流攻防工具nuclei、katana、dalfox、naabu、nikto、netexec、chisel、ysoserial、jwt_tool 等预置知识库PayloadsAllTheThings、HackTricks 等与 PoC 仓库预装三个 Agent 后端 CLICodex、Claude Code、Pi以非 root 用户kali运行工作目录固定为/home/kali/workspace镜像构建一次、所有项目复用——这正是每项目一容器能低开销跑起来的前提。容器生命周期管理从创建到回收的完整流程生命周期管理全部集中在 cairn/src/cairn/dispatcher/runtime/containers.py 的ContainerManager类中可归纳为四个阶段1️⃣ 创建幂等的 ensure_running容器名由项目 ID 派生统一前缀cairn-dispatch-/会被替换为-保证命名可追踪容器以sleep infinity命令启动并常驻Dispatcher 随时通过docker exec注入任务命令幂等设计已运行则直接复用已存在但未运行则重启不存在才新建。每个容器名配一把线程锁避免并发调度时重复创建还能处理 Docker 的 409 命名冲突异常自动降级为复用已有容器保证调度循环永不因竞态崩溃2️⃣ 运行exec 执行 超时控制任务执行封装在 cairn/src/cairn/dispatcher/runtime/process.py 的ManagedProcess中通过 Docker Exec API 在容器内启动命令stdout/stderr 分流捕获命令外层自动套上timeout -k 5s包装超时先宽限 5 秒再强杀防止任务失控支持主动取消cancel配合调度循环在项目被停止/完成时立即终止在跑任务Prompt 等文本文件通过 tar 归档写入容器put_archive无需挂载卷3️⃣ 回收按项目状态精确清理调度主循环 cairn/src/cairn/dispatcher/scheduler/loop.py 每个 tick 都会检查项目状态并异步提交清理任务项目状态容器动作completed完成按completed_action配置stop保留容器便于事后取证分析或remove强制删除更干净stopped人工停止停止运行中的容器不删除孤儿容器启动时扫描所有cairn-dispatch-前缀容器无主容器一律清除清理是异步线程池执行的且带_cleanup_pending去重标记——清理未完成时调度器不会向该项目派发新任务避免边清理边写入的竞态。4️⃣ 故障兜底重启即自愈Dispatcher 重启后ensure_running会检查同名容器状态残留则重启孤儿则清理。即使上一次运行崩溃退出容器现场也能被自动收拾干净无需人工干预。容器模式 vs 本地模式一种抽象两种后端Cairn 通过runtime.execution配置切换执行后端两种模式共享同一套任务执行接口ExecProcess协议container默认每项目一容器强隔离适合生产环境。配置示例见 dispatch.example.yaml 的container段imageWorker 镜像network_mode默认host保证工具能直连目标completed_actionstop保留现场 /remove彻底清理cap_add按需追加NET_RAW、NET_ADMIN等 Linux 能力最小权限原则local无 DockerWorker 直接跑在宿主机上每项目分配独立工作目录见 cairn/src/cairn/dispatcher/runtime/local_backend.py复用本机已登录的claude/codex/piCLI无需 Docker 和 API Key 配置适合开发调试。注意此模式下智能体以你的用户权限运行、没有沙箱务必只在可信环境使用。两种模式的切换只改一行配置runtime.execution: local参考 dispatch.local.example.yaml。快速上手三步跑起容器化 Cairn拉取 Worker 镜像docker pull --platformlinux/amd64 ghcr.io/oritera/cairn-worker-container:latest复制 dispatch.example.yaml 为dispatch.yaml填入 LLM 端点与 API Key执行docker compose up --buildServer 通过健康检查后 Dispatcher 自动启动数据持久化到./datas/cairn/若只想验证环境是否就绪可先跑启动自检cairn dispatch --config dispatch.yaml --startup-healthcheck-only。总结这套容器化架构做对了什么设计点价值项目级容器 容器内并发 Worker环境延续性与资源隔离兼得sleep infinity exec 注入容器常驻任务无状态化调度灵活幂等创建 线程锁 冲突降级并发调度零竞态状态驱动的异步清理 孤儿扫描完成即回收崩溃可自愈container/local 双后端同一接口开发轻量、生产隔离一套代码通吃Cairn 的容器化架构证明多智能体系统的稳定性很大程度取决于最无聊的那部分——环境的隔离与回收。把生命周期管理做扎实上层的状态空间搜索才能放心地野蛮生长。更多设计细节可参考 docs/specs/dispatcher-design.md 与 docs/specs/server-protocol.md。【免费下载链接】CairnA AI general-purpose state-space search engine, validated first on autonomous penetration testing.项目地址: https://gitcode.com/gh_mirrors/cairn2/Cairn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表