如何用 ant CLI 与 Docker 在自己硬件上运行 Claude Managed Agents 会话(每会话一个容器)? 📅 发布时间:2026/9/15 15:32:14 👁 浏览次数: 如何用 ant CLI 与 Docker 在自己硬件上运行 Claude Managed Agents 会话每会话一个容器【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstartsclaude-quickstarts仓库中的managed-agents/self-hosted-sandboxes/docker/演示了一个完整的部署方案把 Claude Managed Agents 的会话跑在自己的硬件上。宿主机用antCLI 轮询一个 self-hosted 环境它本质是一个工作队列每认领到一个会话就通过--on-work脚本启动一个短命的 Docker 容器容器入口是ant beta:worker run它会下载 agent 的技能skills、提供bash、read、write、edit、glob、grep这些工具、维护工作项租约的心跳并在会话空闲 60 秒后退出。整个过程中不向互联网暴露任何端口poller 只是对 API 做长轮询。前提条件来自 docker/README.md 与 CLAUDE.md已安装 Docker且当前用户可用docker version能正常输出antCLI 1.23 或更高版本brew install anthropics/tap/ant安装ant --version可确认jq在 PATH 中已完成ant auth login登录ant auth status可见登录态或者在.env里配置ANTHROPIC_API_KEY。一次性准备创建环境、agent 并写入 .env进入演示目录cd managed-agents/self-hosted-sandboxes/docker执行初始化脚本agents/setup.sh./agents/setup.sh # creates the self-hosted environment agent, writes their IDs to .env它根据 environment.yaml 和 agent.yaml 调用ant beta:environments create/ant beta:agents create并把CLAUDE_ENVIRONMENT_ID、CLAUDE_AGENT_ID追加写入.env。重复执行是安全的已有 ID 时会执行update原地更新agent 会推送新版本。编辑 agent.yaml 后重跑该脚本即可同步修改。然后完成唯一无法自动化的步骤在 Console 中为刚创建的环境铸造密钥路径Environments → 该环境 → Keys并把ANTHROPIC_ENVIRONMENT_KEY填入.env.env.example 中有注释掉的示例行。这个环境密钥是整个方案唯一的凭据宿主机 poller 用它认领工作on-work.sh再把它传进每个容器。启动沙箱侧start.sh 构建镜像并轮询在 sandbox 一侧的终端执行start.sh 需要一直运行./start.sh # builds the image, then polls the environment for sessions它会先docker build构建镜像然后以--on-work on-work.sh启动ant beta:worker poll。健康运行的标志是输出以polling envenv_...结尾。Dockerfile 基于debian:12-slim用ARG ANT_VERSION默认 1.23.0按镜像架构固定安装ant并预装ripgrep、git、curl、jqENTRYPOINT是ant beta:worker run --workdir /workspace --max-idle 60s。如果 agent 还需要其他工具往 Dockerfile 里加即可。start.sh会主动unset ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN——沙箱主机只凭环境密钥运行这是有意设计不要“修复”掉。它还会检查.env中是否已有ANTHROPIC_ENVIRONMENT_ID和ANTHROPIC_ENVIRONMENT_KEY缺失时直接报错提示你先跑setup.sh或补密钥。控制面创建会话并观察容器接管在另一个终端或同一台机器上的其他终端使用同一份.env执行set -a; . ./.env; set a ant beta:sessions create --agent $CLAUDE_AGENT_ID --environment-id $CLAUDE_ENVIRONMENT_ID \ --initial-event {type: user.message, content: [{type: text, text: Which tools do you have? Try each one.}]}创建成功后回到start.sh的终端验证运行过程按顺序会出现[on-work] sessionsesn_... (starting)sesn_...为实际的会话 ID容器自己的日志例如downloaded skill ...、executing tool ...文档示例输出实际内容与 agent 执行的工具调用一致输出session idle after end_turn; stopping容器退出。这说明一个会话的完整生命周期已经跑通。此时可以再给同一会话发消息ant beta:sessions:events send按 README 中的用法发送后续事件新的容器会接管同一个/workspace——它挂载在按会话命名的 Docker volumeshs-ws-session_id上会话内的工作树在容器之间保留。并发、隔离边界与日常维护一个 poller 只服务一个会话。CLI 在--on-work脚本一返回就会停止当前工作项而 on-work.sh 会一直附着在容器上直到容器退出。所以要并发运行多个会话就在多个终端或多台主机上各跑一个./start.sh环境作为队列会把会话分发到各个 poller。隔离边界要知道agent 在容器里可以执行任意 bash能读到容器自身的环境变量包括环境密钥。因此这个变体里容器保护的是宿主机而不是会话之间的相互隔离。如果需要会话间隔离密钥不进入容器、每个容器用 per-session token 认证使用 docker-memory/ 变体其 README 说明了机制与代价。常用维护与可选调参已退出会话的shs-ws-*volume 不会自动删除磁盘占用增长时用docker volume rm清理SANDBOX_DOCKER_RUN_ARGS环境变量可以向docker run追加分量资源限制、网络例如 rootless Docker 下容器要访问宿主机服务时SANDBOX_DOCKER_RUN_ARGS--add-hosthost.docker.internal:host-gateway ./start.sh并在容器内以host.docker.internal访问宿主机。常见故障对照CLAUDE.md 给出了一张与当前部署直接相关的排查表现象原因与处理会话卡在running容器日志出现tool repl not owned by this runner后无动作agent 没有固定到tools: [{type: agent_toolset_20260401}]。演示的 YAML 已固定该 toolset手工创建的 agent 可能漏了。服务默认 toolset 包含 worker 不拥有的工具会话会在等待它们时停滞。注意已固定的 agent 偶尔打印repl日志行属于正常不影响运行。start.sh报set ANTHROPIC_ENVIRONMENT_KEY密钥既没在.env中启用也没在运行start.sh的 shell 中导出。poller 收到 401环境密钥不属于CLAUDE_ENVIRONMENT_ID或.env里ANTHROPIC_BASE_URL指向了与setup.sh不同的 API 主机。完整的 docker/README.md 还解释了各文件的职责agents/sandbox-demo/定义环境与 agent、start.sh构建镜像并启动 poller、on-work.sh负责每次认领时运行--rm的按会话容器、Dockerfile 定义容器环境。部署过程中遇到问题时这些文件就是修改的入口点。【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstarts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考