mcpField
D
daytona

daytona

github.com/daytona云与 DevOps211.3k 次安装5 周前更新
代码仓库

关于 daytona

daytona 是通过 SDK 使用 Daytona Cloud 沙箱的技能,涵盖环境准备与操作,适合需要在隔离环境中运行代码、命令和服务的 Agent。

主要功能

  1. 01从镜像创建隔离沙箱
  2. 02执行 Shell 命令和代码
  3. 03管理文件与沙箱生命周期
  4. 04构建可复用快照
  5. 05通过预览 URL 暴露沙箱服务

适用场景

  1. 01在隔离环境中运行 Agent 生成的代码
  2. 02创建预装依赖的可复用沙箱
  3. 03运行长任务并查看输出

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/daytona/skills --skill daytona

安装后在 Claude Code 中输入/daytona确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
cli.md
references/api/
api-keys.md
audit.md
config.md
docker-registry.md
Health.md
jobs.md
object-storage.md
organizations.md
preview.md
README.md
regions.md
runners.md
sandbox.md
secret.md
snapshots.md
toolbox-computer-use.md
toolbox-file-system.md
toolbox-git.md
toolbox-info.md
toolbox-interpreter.md
toolbox-lsp.md
toolbox-port.md
toolbox-process.md
toolbox-server.md
toolbox-system.md
users.md
volumes.md
warm-pools.md
webhooks.md

详细介绍

什么是 Daytona

Daytona 为 AI Agent 提供完全可组合的计算机——沙箱。每个沙箱都是一个隔离的运行时环境,拥有自己的内核、文件系统、网络栈,以及专用的 vCPU、RAM 和磁盘。Agent 可以在沙箱内安装软件包、运行服务器、编译代码和管理进程。

沙箱基于符合 OCI 标准的镜像或快照构建。任何能在 Linux 上运行的语言或工具都可使用。

**范围:**此技能涵盖 Daytona Cloud(app.daytona.io)。

开始之前

编写任何 Daytona 代码之前,请先确认设置:

  1. 是否已安装 SDK? 检查用户所用语言对应的 Daytona SDK 是否已安装(例如,运行 pip show daytona,或检查 package.json 中是否包含 @daytona/sdk)。如果未安装,请安装。
  2. 是否已设置 API 密钥? 检查 Shell 环境或环境文件中的 DAYTONA_API_KEY。如果未设置,请告知用户需要 API 密钥,并指引他们前往 Daytona Dashboard > API Keys 创建密钥。

SDK 基础 — Python

安装
pip install daytona
创建客户端和沙箱
from daytona import Daytona

# Uses DAYTONA_API_KEY env var
daytona = Daytona()

# Create a sandbox with defaults (1 vCPU, 1GB RAM, 3GB disk)
sandbox = daytona.create()
from daytona import Daytona, CreateSandboxFromImageParams, Image, Resources

daytona = Daytona()

# Create with a custom image, name, and resources
sandbox = daytona.create(CreateSandboxFromImageParams(
    image=Image.debian_slim("3.12"),
    name="my-sandbox",
    resources=Resources(cpu=2, memory=4, disk=8),
))
执行命令

exec 和 code_run 均会返回一个 ExecuteResponse,其中包含 .result(标准输出)和 .exit_code。 code_run 会在沙箱的语言运行时中执行(通过 language= 参数在创建时设置,默认为 "python")。支持:python、typescript、javascript。

# Run a shell command
response = sandbox.process.exec("echo 'Hello, World!'")
print(response.result)     # "Hello, World!"
print(response.exit_code)  # 0

# Run Python code (stateless)
response = sandbox.process.code_run('''
import json
data = {"key": "value"}
print(json.dumps(data, indent=2))
''')
print(response.result)
print(response.exit_code)  # 0 on success, non-zero on error
文件操作
# Write a file
sandbox.fs.upload_file(b"Hello, Daytona!", "/home/daytona/data.txt")

# Read a file
content = sandbox.fs.download_file("/home/daytona/data.txt")
print(content.decode())

# List files
files = sandbox.fs.list_files("workspace")
for f in files:
    print(f"{f.name} ({'dir' if f.is_dir else f.size})")
沙箱生命周期
# Pause and resume later
sandbox.stop()          # frees CPU/RAM, keeps disk
sandbox.start()         # ready to use again

# Long-term storage (must be stopped first)
sandbox.stop()
sandbox.archive()       # cold storage, no quota impact

# Resume a previous sandbox by ID or name
sandbox = daytona.get("sandbox-id-or-name")
sandbox.start()

# Permanently remove
sandbox.delete()

使用 DaytonaError 封装 Daytona 调用以处理错误。对于异步操作,请使用 AsyncDaytona(异步上下文管理器)。完整的 Python SDK 参考请参阅 python-sdk/README.md。

SDK 基础 — TypeScript

TypeScript SDK(@daytona/sdk)与 Python API 相对应。主要区别:使用 executeCommand 代替 exec,使用 codeRun 代替 code_run,文件操作使用 uploadFile/downloadFile/listFiles,使用 DaytonaError 处理错误。使用 npm install @daytona/sdk 安装。

完整的 TypeScript SDK 参考和示例请参阅 typescript-sdk/README.md。

常见模式

自定义环境和快照

当用户需要在沙箱中使用特定软件包、工具或自定义 OS 时,可使用 Image 构建器定义自定义镜像。如果用户要创建多个采用相同配置的沙箱,可建议构建一个快照——快照会将依赖项预装到可复用的模板中,让后续沙箱启动更快,并且预先安装好所有内容。

**注意:**快照基于镜像定义构建,而不是从实时沙箱状态创建。你无法对正在运行的沙箱创建快照来捕获其当前文件系统。

使用 Image 构建器定义镜像:

from daytona import Image

# Debian with Python packages
image = Image.debian_slim("3.12").pip_install(["pandas", "numpy", "scikit-learn"])

# With system packages and shell commands
image = (Image.debian_slim("3.12")
    .run_commands("apt-get update && apt-get install -y curl git",
                   "curl -fsSL https://deb.nodesource.com/setup_20.x | bash -")
    .pip_install(["flask"])
    .env({"APP_ENV": "production"}))

# From a Dockerfile
image = Image.from_dockerfile("./Dockerfile")

# From a registry image directly
image = Image.base("node:20-slim")
import { Image } from '@daytona/sdk'

const image = Image.debianSlim('3.12').pipInstall(['pandas', 'numpy', 'scikit-learn'])

const image = Image.debianSlim('3.12')
    .runCommands('apt-get update && apt-get install -y curl git',
                 'curl -fsSL https://deb.nodesource.com/setup_20.x | bash -')
    .pipInstall(['flask'])
    .env({ APP_ENV: 'production' })

const image = Image.fromDockerfile('./Dockerfile')

const image = Image.base('node:20-slim')

直接从镜像创建一次性沙箱:

from daytona import Daytona, CreateSandboxFromImageParams, Image

daytona = Daytona()
image = Image.debian_slim("3.12").pip_install(["flask"])
sandbox = daytona.create(CreateSandboxFromImageParams(image=image))
const sandbox = await daytona.create({ image })

或者构建快照以供重复使用(如果要创建多个采用相同配置的沙箱,建议使用此方式):

from daytona import Daytona, CreateSandboxFromSnapshotParams, CreateSnapshotParams, Image

daytona = Daytona()

# One-time: build a snapshot
image = Image.debian_slim("3.12").pip_install(["pandas", "numpy", "scikit-learn"])
snapshot = daytona.snapshot.create(CreateSnapshotParams(
    name="data-science",
    image=image,
))

# Every time after: fast start from snapshot
sandbox = daytona.create(CreateSandboxFromSnapshotParams(
    snapshot=snapshot.name,
))
response = sandbox.process.code_run("import pandas; print(pandas.__version__)")
const snapshot = await daytona.snapshot.create({
    name: 'data-science',
    image: Image.debianSlim('3.12').pipInstall(['pandas', 'numpy', 'scikit-learn']),
})

const sandbox = await daytona.create({ snapshot: snapshot.name })

完整的 Image 构建器 API 请参阅 ./references/<lang>-sdk/declarative-builder.md。快照管理请参阅 ./references/<lang>-sdk/snapshots.md。

长时间运行任务模式
from daytona import Daytona

daytona = Daytona()
sandbox = daytona.create()

# ... clone repo, install deps, etc.

# Start a test suite in the background
sandbox.process.exec("nohup pytest --tb=short > /home/daytona/test.log 2>&1 &")

# Check progress later
response = sandbox.process.exec("tail -5 /home/daytona/test.log")
print(response.result)

# Download the full report when done
report = sandbox.fs.download_file("/home/daytona/test.log")
预览 URL

沙箱通过预览 URL 提供 HTTP 服务。默认情况下,预览需要使用令牌进行身份验证;在创建沙箱时设置 public=True(Python)/ public: true(TypeScript)后,预览也可公开访问。

  • 令牌身份验证 — 返回 .url 和 .token(通过 x-daytona-preview-token 标头发送)
    • Python:sandbox.get_preview_link(port) | TypeScript:sandbox.getPreviewLink(port) | Go:sandbox.GetPreviewLink(port) | Ruby:sandbox.get_preview_link(port)
  • 签名 URL(可分享) — 令牌嵌入 URL 中,无需标头
    • Python:sandbox.create_signed_preview_url(port, expires_in_seconds=3600) | TypeScript:sandbox.getSignedPreviewUrl(port, 3600) | Go:sandbox.GetSignedPreviewLink(port, 3600) | Ruby:sandbox.create_signed_preview_url(port, expires_in_seconds: 3600)

详情请参阅 ./references/<lang>-sdk/preview.md。

沙箱限制与约束

约束默认值最大值
每个沙箱的 vCPU14
每个沙箱的 RAM1 GB8 GB
每个沙箱的磁盘3 GiB10 GB

总额度(所有沙箱的 vCPU/RAM/磁盘总量)取决于组织等级:

等级vCPURAM存储要求
等级 11010 GiB30 GiB已验证邮箱
等级 2100200 GiB300 GiB信用卡 + $25 充值 + 已关联 GitHub
等级 3250500 GiB2000 GiB企业邮箱 + $500 充值
等级 45001000 GiB5000 GiB每 30 天充值 $2000

资源状态的影响:

  • 运行中的沙箱会占用 vCPU + RAM + 磁盘额度
  • 已停止的沙箱仅占用磁盘额度
  • 已归档的沙箱不占用额度(数据存储在冷存储中)
网络访问限制

等级 1 和等级 2 的组织受到网络访问限制。 沙箱只能访问必要服务的白名单(软件包注册表、Git 托管平台、AI API、CDN 等)。此限制无法在沙箱级别覆盖——即使设置 networkAllowList,如果组织属于等级 1/2,也不会生效。

等级 3 和等级 4 默认可不受限制地访问互联网,并可选用每个沙箱独立的防火墙控制。

如果代码需要访问任意 URL(外部 API、自定义服务等),则需要等级 3 及以上。可在 Daytona Dashboard > Limits 查看你的等级。

所有等级均可访问的必要服务包括:npm/PyPI/apt 注册表、GitHub/GitLab/Bitbucket、Docker 注册表、主要 AI API(Anthropic、OpenAI、Google AI 等)、S3、Google Cloud Storage,以及常见开发工具(Vercel、Supabase、Clerk、Sentry 等)。完整列表请参阅 network-limits.md。找不到所需服务?请在 daytonaio/sandbox-network-whitelist 提交申请。

可在 Daytona Dashboard > Limits 查看用量。完整详情请参阅 limits.md。

快速决策树

我需要……从这里开始
在隔离环境中运行代码/命令先阅读上文的 SDK 基础内容,然后查看 ./references/<lang>-sdk/process-code-execution.md
加快沙箱启动速度./references/<lang>-sdk/snapshots.md — 根据镜像定义构建快照,并从快照创建新沙箱
在多次沙箱运行之间保留数据./references/<lang>-sdk/volumes.md — 挂载持久存储,使其在沙箱删除后仍然保留
构建自定义环境(指定操作系统、软件包、依赖项)./references/<lang>-sdk/declarative-builder.md — 使用 Image 构建器定义自定义沙箱镜像
控制沙箱可访问的网络内容./references/<lang>-sdk/network-limits.md — 每个沙箱独立的防火墙规则(不受限制的访问需要等级 3 及以上)
在沙箱中使用浏览器或图形界面./references/<lang>-sdk/computer-use-guide.md + ./references/<lang>-sdk/vnc-access.md
运行有状态的 Python 解释器(多次调用之间保留变量)./references/python-sdk/sync/code-interpreter.md 或 ./references/typescript-sdk/code-interpreter.md
存储和检索对象(兼容 S3)./references/<lang>-sdk/object-storage.md(Python 同步/异步、TypeScript、Ruby)
通过 SSH 连接正在运行的沙箱./references/<lang>-sdk/ssh-access.md

将 <lang>-sdk 替换为:python-sdk、typescript-sdk、java-sdk、go-sdk 或 ruby-sdk。

SDK 索引

Python SDK(主要)
文件描述
python-sdk/README.md安装、快速入门、配置
python-sdk/sync/daytona.mdDaytona 客户端 — 创建、列出、删除沙盒
python-sdk/sync/sandbox.md沙盒实例 — 生命周期、资源、标签
python-sdk/sync/process.md执行命令、运行代码
python-sdk/sync/file-system.md文件操作 — 读取、写入、上传、下载
python-sdk/sync/git.mdGit 操作 — 克隆、提交、推送、状态
python-sdk/sync/snapshot.md快照管理
python-sdk/sync/volume.md卷管理
python-sdk/sync/code-interpreter.md有状态 Python 解释器
python-sdk/sync/computer-use.md桌面自动化(鼠标/键盘/屏幕)
python-sdk/sync/lsp-server.md语言服务器协议
python-sdk/sync/object-storage.md兼容 S3 的对象存储
python-sdk/errors.md错误类型
python-sdk/image.md自定义镜像定义

异步版本与同步 API 相对应:python-sdk/async/。

TypeScript SDK

扁平结构(不像 Python 那样区分同步/异步):typescript-sdk/README.md。文件:daytona.md、sandbox.md、process.md、file-system.md、git.md、snapshot.md、volume.md、code-interpreter.md、computer-use.md、lsp-server.md、object-storage.md、execute-response.md、pty-handle.md、errors.md、image.md。

Java SDK、Go SDK 和 Ruby SDK

它们都遵循相同的模式。Java 采用与 TypeScript 相同的扁平结构:java-sdk/README.md。Go 使用紧凑的单文件结构:go-sdk/README.md。Ruby 采用与 TypeScript 相同的结构:ruby-sdk/README.md。

功能指南(按 SDK 划分)

每个 SDK 文件夹都包含相同的一组功能指南,并附有特定语言的示例。查找指南时,请使用 ./references/<lang>-sdk/<filename>(例如,./references/python-sdk/sandboxes.md、./references/typescript-sdk/snapshots.md)。

文件名主题
sandboxes.md沙盒生命周期 — 创建、启动、停止、归档、删除
process-code-execution.md运行命令和代码、有状态解释器
file-system-operations.md读取、写入、上传、下载文件
git-operations.md克隆、提交、推送、状态
snapshots.md根据镜像定义构建可复用的沙盒模板
volumes.md在多个沙盒之间持久存储
ssh-access.md通过 SSH 连接沙盒
vnc-access.md用于桌面沙盒的 VNC
computer-use-guide.md桌面自动化(鼠标/键盘/屏幕)
declarative-builder.md使用 Image builder 构建自定义沙盒镜像
log-streaming.md流式传输沙盒日志
network-limits.md网络防火墙控制
language-server-protocol.md类似 IDE 的功能(自动补全、诊断)
preview.md已公开端口的预览 URL
pty.mdPTY/终端支持
regions.md可用区域
vpn-connections.mdVPN 连接

平台参考

文件描述
limits.md资源限制、速率限制、套餐要求
organizations.md团队管理、成员角色
billing.md用量跟踪、定价
audit-logs.md审计日志记录
linked-accounts.mdGitHub/GitLab 账号关联
web-terminal.md基于浏览器的终端访问
webhooks.mdWebhook 事件
mcp.mdMCP 集成
cli.mdCLI 命令参考

API 参考

所有 Daytona 端点(沙盒、快照、卷、工具箱操作等)的原始 REST API 文档:api/README.md。

评论

支持 Markdown