Docker Sandboxes 实测系列共 5 篇Docker Sandboxes 上手从安装到第一次跑 AgentDocker Sandboxes 工作区怎么接Direct、Clone 和它们的边界Docker Sandboxes 的隔离例外共享 Skills 与宿主机 MCPDocker Sandboxes 的凭证host 代理转发不进 microVMDocker Sandboxes 的网络策略balanced 挡住了什么怎么放行一条例外本篇TL;DRbalanced不是“基本全开”。初始化后本机生成了 197 条网络 allow 规则看着不少但拦下的东西更值得关注宿主机localhost、局域网私有地址、云平台的 metadata 端点169.254.169.254、VS Code 和 Microsoft 的遥测域名默认全部 403 或 DNS 直接拒绝。排查用sbx policy log看某个 sandbox 到底被拦了哪个域名、什么原因放行用sbx policy allow network --sandbox name host改动立刻生效不用重启 sandbox。三档预设balanced挡的比想象中多第一篇提过一句三档预设里balanced是居中那档——默认拒绝放行常见开发站点。这篇把“常见开发站点”具体是什么、“默认拒绝”具体拒绝了什么摊开看。先看规模$ sbx policy ls POLICY SOURCE APPLIES TO SUMMARY local-policy local all network: 197 allow; filesystem read: 1 allow; filesystem write: 1 allow197 条 allow 规则覆盖模型 API、包管理器PyPI、npm、代码托管GitHub、容器 Registry 这些开发常用域名。但下面这些默认都不在名单里$ sbx exec my-sandbox bash -c curl -s -o /dev/null -w %{http_code}\n http://example.com 403 $ sbx exec my-sandbox bash -c curl -s -o /dev/null -w %{http_code}\n http://localhost:1 000 $ sbx exec my-sandbox bash -c curl -s -o /dev/null -w %{http_code}\n https://pypi.org 200example.com403宿主机localhost直接连不上000pypi.org在白名单里200。值得留意的不是这几个示例域名是我这几天测试攒下来的sbx policy log里balanced真正拦住的东西——云平台的 metadata 端点和几个大厂的遥测域名默认也在拒绝名单里Blocked requests: SANDBOX HOST REASON ... 169.254.169.254:80 No matching allow rule (default deny) ... metadata.google.internal:80 No matching allow rule (default deny) ... westus-0.in.applicationinsights.azure.com:443 No matching allow rule (default deny) ... main.vscode-cdn.net:443 No matching allow rule (default deny) ... mobile.events.data.microsoft.com:443 No matching allow rule (default deny)169.254.169.254是云平台通用的 metadata 服务地址AWS/Azure/GCP 都用这个地址回答“我是谁、我的凭证是什么”一个跑在容器里的进程如果尝试连它通常不是好事。balanced默认把这条也堵了不只是挡“陌生网站”。用sbx policy log查一条请求被拦在哪sbx policy log按 sandbox 分组列出被拦和放行的请求带上代理类型和命中次数$ sbx policy log Blocked requests: SANDBOX TYPE HOST PROXY RULE REASON COUNT my-sandbox network example.com:80 forward no applicable policies for op(...) No matching allow rule 1 my-sandbox network example.com network dns proxy policy DNS lookup blocked 1同一个域名会出现两条一条是 HTTP 层的连接被 403一条是 DNS 解析本身就被挡——balanced不只在 HTTP 代理层拦DNS 查询这一步也可能先被切断取决于 sandbox 是不是先解析出了地址再发起连接。想在不实际发请求的情况下判断某个域名会不会被放行用sbx policy check不用起 sandbox 或等 curl 超时$ sbx policy check network blocked.example.com Denied: blocked.example.com:443 Reason: no matching allow rule (default deny) $ sbx policy check network api.anthropic.com Allowed: api.anthropic.com:443放行一条例外只影响一个 sandbox第一篇讲 SuperGrok 时用过全局放行sbx policy allow network *.x.ai:443,…之后所有 sandbox 都能连。如果只想给某一个 sandbox 开例外加--sandbox$ sbx policy allow network --sandbox my-sandbox example.com Rule added to policy local (scope: sandbox:my-sandbox): 64cae706-... (example.com) $ sbx exec my-sandbox bash -c curl -s -o /dev/null -w %{http_code}\n http://example.com 200加规则不需要重启 sandbox立刻生效。撤销同一条规则sbx policy rm network --sandbox my-sandbox --resource example.comsbx policy ls sandbox-name能看到这个 sandbox 当前实际生效的规则合集——包括全局local-policy也包括 kit 额外加的规则。我这台机器上跑过的几个 OpenCode sandboxsbx policy ls显示它们各自还多了一条来自 kit 的 allow 规则是 OpenCode 的 sandbox 模板自己声明的不算在全局 197 条里。这条提醒换一个 Agent 或换一个 kit实际放行的域名集合可能比全局策略更宽出问题时记得连 kit 规则一起查。小结balanced不是一个粗粒度的开关是一份具体的域名白名单——覆盖了主流开发工具链但云 metadata、遥测、局域网、宿主机自己默认全部拒绝。出问题先查sbx policy log定位是 DNS 层还是连接层被拦再用sbx policy check确认改动前后的判断最后按需--sandbox精确放行不必为一个域名把全局策略打开一个口子。