尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Cloudflare Computer反向拨号启动序列:容器为何要穿透egress回连Durable Object
Cloudflare Computer反向拨号启动序列容器为何要穿透egress回连Durable Object【免费下载链接】computerGive your agent a computer 项目地址: https://gitcode.com/GitHub_Trending/computer1/computerCloudflare Computer项目口号Give your agent a computer 是一个运行在 Cloudflare Workers 平台上的「给 AI Agent 一台真电脑」的开源方案。它的容器后端在启动时并不由 Durable Object 主动连进容器而是让容器内的 computerd 守护进程穿透 egress 出网表、反向拨号回连 Durable Object再完成 WebSocket 升级建好控制通道。本文带你完整走一遍这条反向拨号启动序列并解释它为什么不得不这样做。一、先看整体架构控制面在 DO数据面在容器Cloudflare Computer 的经典容器形态由两半组成Durable ObjectDO持有 Workspace负责命令调度、SQLite 持久化存储是「大脑」容器跑着 computerd 守护进程 FUSE 挂载提供真正的文件系统与执行环境是「身体」。上图来自 docs/assets/arch.png容器里 Node 虚拟文件系统经由 FUSE 挂载与 DO 侧的 Node Virtual FS 通过同步协议保持一致SQLite Storage 是文件系统的真相源。注意图中那条从 DO 指向容器的双向通道——它就是本文主角反向拨号建立的 WebSocket。问题在于Cloudflare 容器没有入站公网地址无法被外部主动连接。DO 想控制容器就必须换一种思路——让容器「主动打回来」。二、反向拨号启动序列6 步完整拆解启动序列的核心逻辑在 cloudflare-container.ts 的connect()方法中容器侧的应答逻辑在 computerd.ts。第 1 步DO 拉起容器computerd 监听 8080 端口DO 调用host.start(env, enableInternet)注入环境变量PORT8080、MOUNT_POINT/workspace。容器内的 computerd 启动后在 8080 端口等待指令。启动是幂等的若上一代容器已退出会先 destroy 再重新拉起保证拿到一个全新世代。第 2 步写入 egress 出网拦截表埋下「回拨入口」关键一步DO 调用interceptOutboundHttp(computer.internal, workspaceRef)见 container-host.ts。它在容器的出网表里登记一条规则——凡是发往内部域名computer.internal的 HTTP 请求一律重定向到 WorkspaceProxy 回环 Fetcher最终落到 DO 自己的 fetch 处理器。computer.internal并不是真实 DNS 域名只在容器 egress 表内有效外界无法解析天然是一道隔离墙。回环代理的实现见 proxy.ts它只应答两类路径/health存活确认和/wsWebSocket 升级。第 3 步DO 探测容器健康直到 computerd 就绪DO 通过fetchPort(8080, /health)向容器内直连发 HEAD 请求用指数退避250ms 起步、翻倍、上限 2s反复探测逻辑封装在 health-probe.ts。这一步确认的是「computerd 进程真正在监听」而不只是「平台说容器已启动」。第 4 步先架好「升级承诺」再 POST /connect一个精巧的细节DO 在 POST 之前就先#armUpgrade()注册好等待/ws升级到达的 Promise。因为 computerd 回拨速度可能快于 POST 返回——代码注释明确写着「upgrade can arrive before the POST resolves」。随后 DO 向容器 8080 端口发送POST /connect请求体只有两个字段回拨地址url: http://computer.internal和剩余健康等待预算healthTimeoutMs。第 5 步computerd 验证 egress 通路后反向拨号回连computerd 收到/connect后并不立即连接它先对computer.internal/health做等待探测确认 egress 拦截表与 WorkspaceProxy 通路已生效然后发起ws://computer.internal/ws反向拨号。这个请求沿拦截规则回到 DODO 的 fetch 处理器将其路由给 backend 的handleFetch。第 6 步WebSocket 升级capnweb RPC 会话成型DO 侧用WebSocketPair拆出双端accept 服务端向容器返回101 Switching Protocols随后基于这条 WebSocket 建立 capnweb RPC 会话——此后所有的 shell 执行、文件读写、同步水位watermarks调用都跑在这条由容器主动拨入的双向通道上。三、为什么必须「反向」三个根本原因 容器没有入站地址。Cloudflare 容器按 DO 生命周期随需启动不暴露公网端口DO 无法正向建连。反向拨号让「被调用方」变成了「主叫方」绕开了入站限制。DO 会休眠并换新化身。Durable Object 是状态化隔离环境休眠后重新激活是一个「新化身」。computerd 的测试用例专门覆盖了这一点新化身重新 POST/connect时旧 WebSocket 会被主动关闭replaced by new /connect新会话接管同一容器。正向连接在这种场景下无从续接反向重拨则天然支持见 computerd.test.ts。egress 策略即安全边界。出网访问受三档策略控制见 egress.tsnone默认禁止出网、direct放开直连、http-gateway所有出网流量携带 token 经网关白名单放行。控制通道走的computer.internal只在 egress 表内可达外部攻击者无法伪造回拨入口。可运行的对照实验见 examples/egress/README.md。四、连接建立后心跳、断线检测与自愈 通道不是建好就万事大吉应用层心跳每 20 秒发一次sync.watermarks()RPC既快速发现「静默死亡」的对端又给中间代理的空闲计时器保温断线感知WebSocket 的 close/error 事件、乃至 capnweb RPC 层先于底层 socket 察觉的「abort 帧」都会解析出closedPromiseWorkspace 随即丢弃缓存句柄下一次操作自动重建全新会话启动失败自愈若健康探测在预算内始终不通backend 会最多执行一次restart()destroy 旧容器 重新 start 再次探测把启动失败的诊断信息阶段、尝试次数、上一代退出原因完整打包成WorkspaceTransportError。五、延伸阅读源码与文档导航 模块路径作用容器后端与启动序列cloudflare-container.tsconnect()、/ws 升级、心跳回环代理 WorkspaceProxyproxy.ts应答 /health 与 /ws 反向拨号容器驱动接口container-host.tsstart/restart/interceptOutboundHttp健康探测health-probe.ts/health 就绪判定computerd 守护进程computerd.ts/connect 接收与回拨逻辑egress 策略定义egress.tsnone/direct/http-gateway 三档容器示例工程examples/container/README.md可运行的 container 后端官方文档目录docs/README.mdVFS、同步协议、挂载接口等六、一句话总结反向拨号不是炫技而是平台约束下的最优解容器出得了网、进不了门那就让容器出门打一个电话回来——computer.internal这条只在 egress 表内存在的「内线电话」让 DO 无论休眠多少次都能靠一次 POST /connect 找回它的那台电脑。【免费下载链接】computerGive your agent a computer 项目地址: https://gitcode.com/GitHub_Trending/computer1/computer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

实习面试复盘:10场面试总结的高频考点与准备方法

实习面试复盘:10场面试总结的高频考点与准备方法

从三月开始投第一份实习简历,到六月初拿到满意的offer,我一共面了10家不同类型和规模的公司。每场面试结束后的当晚,我都会趁着记忆还热乎,把被问到的问题、我的回答、卡壳的地方、面试官的表情变化全部记下来。这篇实习面经总结&…

📅 2026/9/12 5:29:26
Prometheus 监控落地指南:从 Kubernetes 采集到告警降噪

Prometheus 监控落地指南:从 Kubernetes 采集到告警降噪

Prometheus 监控落地指南:从 Kubernetes 采集到告警降噪 【免费下载链接】prometheus The Prometheus monitoring system and time series database. 项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus 在真实集群里部署 Prometheus 监控&#x…

📅 2026/10/8 7:59:27
基于大数据驱动的金融风险评估与预警系统大数据深度学习项目|计算机毕设项目|计算机毕设| 大数据专业

基于大数据驱动的金融风险评估与预警系统大数据深度学习项目|计算机毕设项目|计算机毕设| 大数据专业

一、项目介绍 随着互联网技术的不断进步与金融市场的深化发展,股票交易系统正逐步向数字化、智能化方向转型。传统的股票交易方式因信息滞后、流程繁琐等问题,已难以满足现代投资者的需求。在此背景下,虚拟股票交易系统应运而生,它…

📅 2026/10/5 20:44:19
MORE NEWS

更多资讯

📰

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

📰

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

📰

先能用,再好用:从烂尾复盘到两周上线,全栈项目的‘原型—快速迭代‘方法论

先能用,再好用:从烂尾复盘到两周上线,全栈项目的“原型—快速迭代”方法论 全栈学习路径的文章已经很多了:怎么选技术栈、怎么搭环境、怎么记文档,几乎每个方向都有人写。但一个更扎心的问题很少有人正面讨论——为什…

📰

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看‘会思考‘改写了哪些边界

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看“会思考”改写了哪些边界 一、先说结论:变强的不是“知识”,而是“解法” 每次新模型发布,评测榜单都会涨几个点,大…

📰

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

📰

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬