Docker Cloud Sandboxes:让编码 Agent 从笔记本安全迁移到云端

2026-09-25 31 预计阅读时间: 1 分钟
来源: docker.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

编码 Agent 已经能独立修改文件、执行测试和调用开发工具,但运行时间越长、权限越高,开发者就越需要隔离环境。Docker 此前推出的 Sandboxes 使用 microVM 承载自主工作的编码 Agent;新加入的 Cloud Sandboxes 则把同一套工作方式扩展到云端,并强调可以通过一条命令在本地与云端之间切换。

这项变化的重点不只是“把任务放到远程机器上”,而是让工作区、运行环境和安全边界一起迁移,减少本地试验与云端长任务之间的割裂。

microVM 为什么适合自主编码 Agent

普通代码补全通常只生成文本,而编码 Agent 可能会执行更广泛的操作:

  • 读取和修改整个仓库;
  • 安装依赖、运行构建脚本;
  • 启动测试、浏览器或本地服务;
  • 调用 Git、包管理器和其他命令行工具;
  • 在较长时间内持续迭代。

因此,仅靠一个工作目录或进程级限制通常不够。Docker Sandboxes 将 Agent 放进 microVM 环境,让文件系统、进程和运行时边界与开发者的主机分离。这样即使 Agent 执行了错误命令,影响范围也更容易控制。

不过,microVM 并不等于“绝对安全”。一旦把主机凭据、Docker Socket、云账号密钥或无限制网络访问暴露给沙箱,隔离收益就会被显著削弱。真正可靠的方案仍然需要最小权限、短期凭据和明确的网络策略。

从本地切到云端,真正需要保持什么

“一条命令切换”要成立,关键不是两边使用相同的机器,而是双方遵守相同的任务契约。至少应固定以下内容:

  1. 代码输入:使用哪个提交、分支或工作区快照。
  2. 运行环境:基础镜像、语言版本和系统依赖。
  3. Agent 指令:允许修改什么,完成条件是什么。
  4. 权限边界:哪些目录可写、哪些网络地址可访问。
  5. 结果输出:补丁、提交、测试报告和日志如何带回。

本地沙箱适合快速试探和交互式调试;云端沙箱通常更适合耗时构建、并行任务,或者不希望因笔记本休眠而中断的工作。切换前最好先生成一个明确的 Git 提交或工作区快照,否则“同一个任务”可能实际运行在两套不同代码上。

一个可改造成真实项目的本地/云端入口

下面示例不是官方 CLI 语法,而是一种可落地的包装方式。假设本地和云端沙箱工具都接受统一的 run --config --workspace 接口;使用前请把 LOCAL_SANDBOX_CLI 与 CLOUD_SANDBOX_CLI 替换成实际命令。

先定义任务配置:

# sandbox-job.yaml
version: 1
workspace:
  source: git
  writable_paths:
    - src
    - tests
    - package-lock.json

runtime:
  image: node:22-bookworm
  timeout_minutes: 45

agent:
  task: >-
    修复失败的测试,只修改 src 和 tests,完成后运行 npm test,
    并输出变更摘要与仍未解决的问题。

network:
  mode: restricted
  allow_hosts:
    - registry.npmjs.org

artifacts:
  collect:
    - test-results
    - agent-summary.md

再创建统一入口脚本:

#!/usr/bin/env bash
set -euo pipefail

TARGET="${1:-local}"
CONFIG="${SANDBOX_CONFIG:-sandbox-job.yaml}"

if [[ ! -f "$CONFIG" ]]; then
  echo "Missing config: $CONFIG" >&2
  exit 1
fi

if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
  echo "Run this command inside a Git repository." >&2
  exit 1
fi

case "$TARGET" in
  local)
    CLI="${LOCAL_SANDBOX_CLI:-sandbox-local}"
    ;;
  cloud)
    CLI="${CLOUD_SANDBOX_CLI:-sandbox-cloud}"
    ;;
  *)
    echo "Usage: $0 [local|cloud]" >&2
    exit 2
    ;;
esac

if ! command -v "$CLI" >/dev/null 2>&1; then
  echo "Sandbox CLI not found: $CLI" >&2
  echo "Set LOCAL_SANDBOX_CLI or CLOUD_SANDBOX_CLI to your actual executable." >&2
  exit 127
fi

echo "Target: $TARGET"
echo "Commit: $(git rev-parse HEAD)"
exec "$CLI" run --config "$CONFIG" --workspace "$PWD"

保存为 run-agent.sh 后执行:

chmod +x run-agent.sh

# 在本地 microVM 沙箱中试运行
LOCAL_SANDBOX_CLI=my-local-sandbox ./run-agent.sh local

# 保持任务配置不变,切换到云端
CLOUD_SANDBOX_CLI=my-cloud-sandbox ./run-agent.sh cloud

这个包装层的价值在于,团队不必把运行目标写进 Agent 指令。任务、权限和产物保持稳定,只有执行后端发生变化。接入真实产品时,还应确认其工作区同步、凭据注入和结果下载机制,而不是默认本地与云端行为完全一致。

上线前不要漏掉这些边界

可以从小型、低权限仓库开始验证,并按下面的清单逐步扩大使用范围:

  • 固定代码版本:记录提交哈希,避免云端任务基于过期工作区运行。
  • 限制凭据:使用短期、只读或仓库级令牌,不要复制个人全局凭据。
  • 收紧网络:按域名或服务建立允许列表,避免任意外连。
  • 控制写入范围:默认只允许修改任务需要的目录。
  • 审查生成结果:将补丁、提交和测试报告带回正常代码评审流程。
  • 设置超时与预算:云端 Agent 可能循环执行,应限制时间、并发数和资源规格。
  • 保存审计记录:保留启动者、输入提交、执行命令、网络访问和最终产物。

Cloud Sandboxes 最值得关注的地方,是它把“在哪里运行 Agent”变成一个可以切换的部署选择。开发者可以在笔记本上快速开始,再把长时间任务交给云端,但安全性并不会因为使用 microVM 自动完成。只有把可复现环境、最小权限和结果审查组合起来,本地到云端的迁移才真正可靠。


相关推荐