@computesdk/docker

中文文档
1.2.68发布于 2026/11/06MITTypeScriptESM + CJS构建来源已验证近 30 天下载 3995

计算SDK的多克供应商-用于开发和测试的本地集装箱化沙盒

中文使用文档
文档目录21 节
  1. 安装
  2. 设置
  3. 使用量
  4. 高级配置
  5. 配置
  6. 环境变量
  7. 特征
  8. API 参考
  9. 命令执行
  10. 文件系统操作
  11. 终端操作
  12. 沙盒管理
  13. 处理错误
  14. 实例
  15. 数据科学工作流程( Python)
  16. 状态循环
  17. 背景进程 + 端口
  18. 最佳做法
  19. 限制
  20. 支助
  21. 许可证

@ computesdk/ docker (帮助)

基于 Docker 的提供者 计算SDK 发射轻量级,可配置的容器(Python或Node.js),运行代码和 shell 命令,并提供简单的文件系统辅助器件——全部在干净的提供者-不可知界面后.


安装

# like the other computesdk providers — single package
pnpm add @computesdk/docker
# or
npm i @computesdk/docker
# or
yarn add @computesdk/docker

你个 对 在此运行的主机上需要一个正在工作的多克引擎/ 守护进程 .


设置

除了Docker没什么特别的 提供商和多克通过 dockerode,它自动检测您从env或默认的套接字连接.

常见的环境变量(被多克/多克罗得所使用) :

  • DOCKER_HOST - 比如说. unix:///var/run/docker.sock (Linux/macOS)或 缩写 tcp://127.0.0.1:2375
  • DOCKER_TLS_VERIFY, (中文(简体) ), DOCKER_CERT_PATH ——用于TLS安全TCP
  • HTTP_PROXY, (中文(简体) ), HTTPS_PROXY, (中文(简体) ), NO_PROXY ——因为牵引后代理

在 Linux 上,确保您的用户能够访问 Docker : sudo usermod -aG docker $USER 然后重新登录,或用 sudo。 。 。 .


使用量

import { docker } from '@computesdk/docker';

const compute = docker({
  runtime: 'python', // or 'node'
  image: { name: 'python:3.11-slim', pullPolicy: 'ifNotPresent' },
});

// Create a sandbox and run Python
const sandbox = await compute.instances.create();
const result = await sandbox.runCommand('python -c "print(\"Hello from Python\")"');
console.log(result.stdout.trim()); // Hello from Python

await sandbox.destroy();

高级配置

import { docker } from '@computesdk/docker';

const compute = docker({
  runtime: 'node',
  image: { name: 'node:20-alpine' },
  container: {
    workdir: '/workspace',
    env: { FOO: 'bar' },
  },
});

const sandbox = await compute.instances.create();

const result = await sandbox.runCommand('node -e "console.log(\"Hello, World!\")"');
console.log(result.stdout.trim()); // Hello, World!

const cmd = await sandbox.runCommand('echo Hello from command');
console.log(cmd.stdout.trim()); // Hello from command

await sandbox.destroy();

配置

类型 : DockerConfig

{
  // dockerode connection; if omitted, dockerode uses DOCKER_HOST or /var/run/docker.sock
  connection?: import('dockerode').DockerOptions;

  // default runtime; must be 'python' or 'node'
  runtime?: 'python' | 'node';

  // provider-side execution timeout (ms)
  timeout?: number;

  // image to use for containers
  image: {
    name: string;                   // e.g. 'python:3.11-slim' or 'node:20-alpine'
    pullPolicy?: 'always' | 'ifNotPresent' | 'never';
    auth?: { username?: string; password?: string; serveraddress?: string; identitytoken?: string; registrytoken?: string; };
  };

  // container defaults
  container?: {
    user?: string;
    workdir?: string;
    env?: Record<string, string>;
    binds?: string[];               // ['/host:/container:ro']
    ports?: Record<`${number}/${'tcp'|'udp'}`, Array<{ hostPort?: number; hostIP?: string }>>;
    networkMode?: string;           // 'bridge', 'host', custom
    privileged?: boolean;
    capabilities?: { add?: string[]; drop?: string[] };
    gpus?: 'all' | number | string; // requires NVIDIA runtime/drivers
    resources?: { memory?: number; nanoCPUs?: number; cpuShares?: number; /* … */ };
    logDriver?: string;
    logOpts?: Record<string, string>;
    autoRemove?: boolean;           // default true
    tty?: boolean;
    openStdin?: boolean;
  };

  // raw passthrough if you need full control
  createOptions?: import('dockerode').ContainerCreateOptions;
  startOptions?: import('dockerode').ContainerStartOptions;

  cleanup?: 'always' | 'onSuccess' | 'never';
  streamLogs?: boolean;
}

默认( 摘录 ) :

{
  runtime: 'python',
  image: { name: 'python:3.11-slim', pullPolicy: 'ifNotPresent' },
  container: {
    workdir: '/workspace',
    env: {},
    autoRemove: true,
    tty: false,
    openStdin: false,
    resources: { memory: 512 * 1024 * 1024 },
  },
}

环境变量

  • 连接变量从 设置
  • 您的工作量通过 container.env (注入容器)

特征

  • 蟒 财务报告和审定财务报表 节点.js 运行时间
  • 代码执行 带有语法错误的表面
  • 贝壳命令 (带有 PID 的前置背景( B))
  • 文件系统助手数字 : readFile, (中文(简体) ), writeFile, (中文(简体) ), mkdir, (中文(简体) ), readdir, (中文(简体) ), exists, (中文(简体) ), remove
  • 端口 URL 分辨率数字 : getUrl({ port }) + 如果发布主机 URL
  • 输入访问数字 : getInstance() 返回居中点 Container 和客户端
  • 图像拉动策略数字 : always | ifNotPresent | never (+ 登记认证)

API 参考

命令执行

sandbox.runCommand(command: string, options?: RunCommandOptions): Promise<CommandResult>
  • 运行通过 /bin/sh -c "…" 与stdout/stder抓取.
  • 回返 { stdout, stderr, exitCode, durationMs }。 。 。 .
  • 选项 : { cwd?, env?, timeout?, background? }。 。 。 .

文件系统操作

sandbox.filesystem.readFile(path)
sandbox.filesystem.writeFile(path, content)
sandbox.filesystem.mkdir(path)
sandbox.filesystem.readdir(path)
sandbox.filesystem.exists(path)
sandbox.filesystem.remove(path)

通过外壳+基质64执行可移植性.

终端操作

互动终端没有曝光。 使用 runCommand('…') 非交互式会议.

沙盒管理

const sandbox = await compute.instances.create();

await sandbox.getInfo(); // { id, provider, status, createdAt, timeout, metadata }
await sandbox.getUrl({ port, protocol?: 'http' | 'https' });
sandbox.getInstance(); // { docker: Docker, container: Container, ... }
await sandbox.destroy();

处理错误

  • 命令错误 + 作为非零返回 exitCode 与 stderr
  • Docker 错误 (推/起/执行) 抛出
const res = await sb.runCommand('bad-command');
if (res.exitCode !== 0) {
  console.error('stderr:', res.stderr);
}

实例

数据科学工作流程( Python)

const sandbox = await compute.instances.create();
await sandbox.runCommand('python3 -m pip install --no-cache-dir pandas');
await sandbox.filesystem.writeFile('/workspace/app.py', `
import pandas as pd
print("rows:", len(pd.DataFrame({"x":[1,2,3]})))
`);
const run = await sandbox.runCommand('python3 /workspace/app.py');
console.log(run.stdout.trim()); // rows: 3
await sandbox.destroy();

状态循环

const sandbox = await compute.instances.create();
await sandbox.runCommand('echo boot > /tmp/state');
const res = await sandbox.runCommand('cat /tmp/state'); // 'boot'
await sandbox.destroy();

背景进程 + 端口

const sandbox = await compute.instances.create();
await sandbox.runCommand('python3 -m http.server 8080', { background: true });
const url = await sandbox.getUrl({ port: 8080 });
console.log('Serving at', url);
await sandbox.destroy();

要让端口从主机到达,请在站前公布:

const compute = docker({
  runtime: 'python',
  image: { name: 'python:3.11-slim' },
  container: {
    ports: { '8080/tcp': [{ hostPort: 8080, hostIP: '127.0.0.1' }] },
  },
});

最佳做法

  • CI 中的预推图像 : docker pull python:3.11-slim node:20-alpine
  • Pin 图像版本; 避免 latest
  • 设定 container.resources 绑定 CPU/RAM
  • 使用 /workspace 并保存临时文件 /tmp
  • 发布您打算通过 getUrl()
  • 优先无根 user 并减少不必要的能力
  • 对于 GPU 工作 : gpus: 'all' ,并确保 NVIDIA 运行时间/驱动器

限制

  • 需要本地或可达到的 Docker 守护进程
  • 无 WebSocket 终端( 仅非交互)
  • 此提供者未执行的快照/ 模板
  • getUrl() 返回只针对已发布端口或可到达的容器IP的主机 URL

支助


许可证

麻省理工学院

版本与发布记录

@computesdk/docker 共发布 82 个版本,首次发布于 2025/10/15;过去 12 个月发布了 78 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.68latest2026/11/064 天前
1.2.672026/11/046 天前
1.2.662026/10/2813 天前
1.2.652026/10/2318 天前
1.2.642026/10/2318 天前
1.2.632026/10/2219 天前

关于 @computesdk/docker 的常见问题

@computesdk/docker 是什么?

计算SDK的多克供应商-用于开发和测试的本地集装箱化沙盒

如何安装 @computesdk/docker?

在项目目录运行 npm install @computesdk/docker,或使用 pnpm add / yarn add / bun add。

@computesdk/docker 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@computesdk/docker 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@computesdk/docker 可以商用吗?

@computesdk/docker 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@computesdk/docker 的下载量有多少?

根据 npm 官方下载统计,@computesdk/docker 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,995 次,日均约 133 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@computesdk/docker 还在维护吗?

最新版本 1.2.68 发布于 2026/11/06(4 天前);至今共发布 82 个版本,其中过去 12 个月发布了 78 个;首次发布于 2025/10/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。