# @crvouga/mockingbird-service-docker 中文文档

规范地址：https://npmcn.com/package/%40crvouga/mockingbird-service-docker/

版本：1\.11\.0
npm 元数据更新时间：2026-11-11T02:06:17.138Z
中文译文更新时间：2026-11-11T06:40:28.507Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crvouga/mockingbird-service-docker
原文对照：https://npmcn.com/package/%40crvouga/mockingbird-service-docker/?lang=original
项目主页：https://github.com/crvouga/mockingbird/tree/main/packages/service/docker#readme
源码仓库：https://github.com/crvouga/mockingbird

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：4.6 MB，23 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-10-05T09:24:53.065Z
- 最新版本发布：2026-11-11T02:06:16.525Z
- 近 30 天下载量：2782（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：22（近 12 个月 22 个）

## 中文简介

具有可移植控件和节点传输的状态多克引擎 API v1.52模拟器.

## 安装

```sh
npm install @crvouga/mockingbird-service-docker
```

也可以使用：`pnpm add @crvouga/mockingbird-service-docker`、`yarn add @crvouga/mockingbird-service-docker`、`bun add @crvouga/mockingbird-service-docker`

## README

# @crvouga/mockingbird-service-docker (英语)

> 本地模拟器。 真正的API合同. 部分 [嘲笑鸟](https://github.com/crvouga/mockingbird)。 。 。 .

工作在建多克引擎 API 1.52模拟器. 它执行GET/HEAD `/_ping`, (中文(简体) ), 获取 `/version`, (中文(简体) ), `/info`, (中文(简体) ), `/containers/json`,以及 `/containers/{id}/json`附加时 鸟类共享运行时间控制. 邮政 `/containers/create` 持续停止 集装箱。 开始、等待、停止、杀死和清除使用明确的模拟完成. 节点条目支持非TTY附加和脚本双通流. 合同是 被钉住 [API 证据.md](https://npmcn.com/package/%40crvouga/mockingbird-service-docker/API_EVIDENCE.md)· ; [支助](https://npmcn.com/package/%40crvouga/mockingbird-service-docker/SUPPORT.md) 列出操作.

## 安装

```sh
bun add @crvouga/mockingbird-service-docker
```

## 使用量

```ts
import { DockerClient } from "@docker/node-sdk"
import { createServer } from "@crvouga/mockingbird-service-docker/server"

// Docker's Node SDK, as your application uses it (run with Node; its transport does not
// work under Bun). Only the Docker host changes.
const server = await createServer({ seed: 42 })
const docker = await DockerClient.fromDockerHost(`tcp://${server.host}:${server.port}`)
console.log(await docker.systemPing()) // 1.52

await docker.close()
await server.close()
```

使用 `DockerAPI` 仅供供应商获取表面,或 `createRuntime` 卫生, 管理控制,命名空间,断层,度量,以及请求日记. 无条目 导入节点服务器。 节点条目提供 `createServer()` 以白昼盟誓 默认回回转端口; 用 `await server.close()` 测试后.

```sh
mockingbird-docker serve --port 8826
```

HTTP 客户端可以瞄准 `http://127.0.0.1:8826`。使用 `DOCKER_HOST` 能够选择 `tcp://127.0.0.1:8826`未转录和 `/v1.52` 供应商的路线工作. 1.52以上或低于模拟引擎最低1.44接收供应商的版本 400个错误(在1.24下说明案文,JSON除外)。 1.44-1.51版本收到 明确仿真器只501:其线条格式没有被执行. 模拟报告 合成引擎 29.1.0 身份; 这不是本地的多克版本. API 1.52 选取的情景比对引擎 29.8.0; 完整的客户端和引擎 兼容性不主张 。 见 [核查边界](https://npmcn.com/package/%40crvouga/mockingbird-service-docker/#readme-verification-boundaries)。 。 。 .

## 节点 HTTP 示例

用节点对已建软件包运行此操作 。 服务器使用麻黄素 回回端口和合成状态;不需要多克安装.

```ts
import { DockerClient } from "@docker/node-sdk"
import { createServer } from "@crvouga/mockingbird-service-docker/server"

const server = await createServer({ seed: 42 })
const docker = await DockerClient.fromDockerHost(`tcp://${server.host}:${server.port}`)
try {
  console.log(await docker.systemVersion())
} finally {
  await docker.close()
  await server.close()
}
```

对于 Unix 套接字, 通过一个绝对的, 缺席 `socketPath` 在测试目录中 ,并使用节点HTTP请求如下: CLI 使用共享 TCP 适配器; 使用 `createServer` 为多克的附着物和Unix-socket运输.

## 合成观测

`POST /__admin/docker/seed` 在选中的图像和容器中进行解析 名称空间。 它从不下载图像或启动进程. 例如:

```ts
import { DockerClient } from "@docker/node-sdk"
import { createServer } from "@crvouga/mockingbird-service-docker/server"

const server = await createServer({ seed: 42 })

// Test setup: seed synthetic observations.
await fetch(`${server.url}/__admin/docker/seed`, {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    images: [{ id: `sha256:${"a".repeat(64)}`, tags: ["synthetic:latest"] }],
    containers: [{
      id: "b".repeat(64), name: "worker", image: "synthetic:latest",
      status: "running", labels: { suite: "example" }, cmd: ["synthetic-worker"],
    }],
    daemon: { rootless: true },
  }),
})

// The application sees them through Docker's SDK.
const docker = await DockerClient.fromDockerHost(`tcp://${server.host}:${server.port}`)
const [worker] = await docker.containerList({ all: true })
console.log(worker?.Names, worker?.State) // [ '/worker' ] running

await docker.close()
await server.close()
```

图像标识是不可改变的 SHA-256 字符串; 容器标识是独立的 64 字符 小写十六进制字符串。 集装箱 `image` 解决已存在的图像 ID 或精确标记。 复制ID、名称和图像标签冲突;未知图像返回 404. 无效的种子场返回400个,然后将整个种子倒回. 集装箱 字段还接受 `exitCode`, (中文(简体) ), `entrypoint`, (中文(简体) ), `env`, (中文(简体) ), `workingDir`, (中文(简体) ), `user`, (中文(简体) ), `hostConfig`, (中文(简体) ), `networkSettings`, (中文(简体) ), `sizeRw`,以及 `sizeRootFs`状态是 `created`, (中文(简体) ), `running`, (中文(简体) ), `paused`, (中文(简体) ), `restarting`, (中文(简体) ), `removing`, (中文(简体) ), `exited`,或 `dead`。 。 。 . 时间戳使用仿真器时钟;报告的PID为零,从不主机进程.

`GET /__admin/docker/daemon` 报告 `{ available, rootless, simulated: true }`。 。 。 . `POST` 改为相同的路由变化 . `available: false` 丢弃提供者 在共享的保健/管理路线仍然无障碍和集装箱状态的情况下提出请求 保留。 无根、安全、操作系统、构建、大小和资源元数据 合成观测,不是主机证明或执行.

列出运行容器的默认值,包括已暂停/重新启动的容器. `all`, (中文(简体) ), 正数 `limit`,或一个 `status` 过滤器包括已停止的容器. `limit` 选择 最新结果; `size` 包括种子字节数。 就像被钉住一样 引擎的布尔分解器, 空/0/ 否/ 假/ 无( 对大小写不敏感) 表示错误和 其他价值观意味着真实。 透视解决了完整的ID,独特的前缀,和名.

`filters` 接受 JSON 字符串阵列或布尔键集 `id`, (中文(简体) ), `name`, (中文(简体) ), `status`, (中文(简体) ), `label`,以及 `exited`与和;a 类别与 OR 合并,但标签必须全部匹配。 名称匹配 支持文字、点、锚,最多一个 `.*`; 其他正则构造 和其他过滤类返回明确的模拟器只返回501个错误。 错误 过滤形状、状态和退出代码返回400。 种子状态和守护进程 设置参与共享重设和时间线检查站.

## 集装箱的创建

调用前种子图像 `POST /containers/create`。图像种子可能包括 `platform` (默认) `linux/amd64`和 `config` 包含支持的图像默认值. 创建可解析图像ID或精确标记, 添加 `:latest` 到一个未标记的引用. 它从不拉动或执行图像. 缺少图像和请求的平台 不匹配返回404;一个隐含的主机-平面不匹配产生警告.

支持的身体领域是: `Image`, (中文(简体) ), `Cmd`, (中文(简体) ), `Entrypoint`, (中文(简体) ), `Env`, (中文(简体) ), `Labels`, (中文(简体) ), `WorkingDir`, (中文(简体) ), `User`, (中文(简体) ), `Hostname`, (中文(简体) ), `Domainname`, (中文(简体) ), `AttachStdin`, (中文(简体) ), `AttachStdout`, (中文(简体) ), `AttachStderr`, (中文(简体) ), `OpenStdin`, (中文(简体) ), `StdinOnce`, (中文(简体) ), `Tty`, (中文(简体) ), `NetworkDisabled`, (中文(简体) ), `StopSignal`, (中文(简体) ), `StopTimeout`, (中文(简体) ), `HostConfig`,以及 `NetworkingConfig`返回不支持的字段 明确仿真器只出501个错误。 不良的字段类型, 相对的工作目录, 无效的停止信号,无效的名称,和缺失的命令返回400. 图像默认供应命令/入口点、环境、标签和所选 字符串。 请求环境密钥和标签优先. `Entrypoint: [""]` 清除图像条目; 提供替换命令.

使用 `?name=...` 为稳定的名字。 相互冲突的名称返回409个,包括同时 创建请求。 通用名称的使用 `mockingbird_<id-prefix>`答复中载有 `Id` 财务报告和审定财务报表 `Warnings`身份证是确定性合成64个特征的六分弦, 无法在存储的记录中变相,并使用共享的ID序列恢复 时行取出. 新记录检查为 `created` 与 `Running: false`。 。 。 .

支助 `HostConfig` 元数据包括 `NetworkMode`, (中文(简体) ), `IpcMode`, (中文(简体) ), `PidMode`, (中文(简体) ), `CgroupnsMode`, (中文(简体) ), `Runtime`, (中文(简体) ), `AutoRemove`, (中文(简体) ), `ReadonlyRootfs`, (中文(简体) ), `Privileged`, (中文(简体) ), `Init`, (中文(简体) ), `Memory`, (中文(简体) ), `MemorySwap`, (中文(简体) ), `NanoCpus`, (中文(简体) ), `CpuShares`, (中文(简体) ), `PidsLimit`, (中文(简体) ), `Binds`, (中文(简体) ), `CapDrop`, (中文(简体) ), `CapAdd`, (中文(简体) ), `SecurityOpt`, (中文(简体) ), `Dns`, (中文(简体) ), `ExtraHosts`, (中文(简体) ), `Mounts`, (中文(简体) ), `Tmpfs`, (中文(简体) ), `PortBindings`, (中文(简体) ), `RestartPolicy`,以及 `LogConfig`。 。 。 . `NetworkingConfig.EndpointsConfig` 保留 接受检查 `NetworkSettings.Networks`组合 不强制使用资源、挂载、安全控制或网络设置. 内嵌主机元数据按提供时保留;完整守护进程专用资源及 网络验证不是模拟的。 没有任何主机隔离的说法.

## 开始、 等待和脚本完成

`POST /containers/<id>/start` 标记正在运行的已创建/已退出的容器(204个), 返回已运行/ 重新启动时的 304, 返回暂停时的 409, 已死亡 , 或删除记录。 没有执行图像 。 钟表供应 `StartedAt`· ; 重新开始清除退出代码但保留前一个 `FinishedAt` 直至完成为止. 检查点、 检查点目录和解开Keys 选项只返回 501 明确模拟器. 和被钉住的引擎路线一样 尸体长于7字节 尸体被打碎 返回 400; 使用空体.

`POST /containers/<id>/wait?condition=...` 接受 `not-running` (亦为默认) 对省略/空值, `next-exit`,或 `removed`信头立即到达; jSON机构 `{ "StatusCode": 7 }` 只有在条件成熟时才能到达. 不运行返回已停止/ 创建的容器 。 下一个出局等待 即使已经停止了 未来出口 已删除的 普通出口 。 无效条件返回400个,未知容器返回404个 在打开溪流之前.

使用 `POST /__admin/docker/containers/<id>/complete` 与 `{ "exitCode": 7 }` 改为 明确完成运行中的合成容器。 继续完成 `exited`, (中文(简体) ), `FinishedAt`,以及所提供的整数代码,唤醒相关的服务员,并抓取 a 共用时光线检查站。 若为 `HostConfig.AutoRemove` 是真的, 也完成 删除合成记录并满足被删除的等待。 没有主机资源 触动。 在停止返回时重复完成 409 。 这些控制在 ; 提供者操作可以使用共享分支.

`GET /__admin/docker/waits` 报告命名空间等待 和终止操作. 中止请求或取消其响应机构释放其等待手柄. 重置取消在重置名称空间中等待; `runtime.close()`, (中文(简体) ), `DockerAPI.close()` 财务报告和审定财务报表 `createServer().close()` 取消自有等待 。 取消的机构拒绝 而不是编造一个退出代码。 等待手柄是短暂的,从未被序列化. 检查和快照在恢复实例之前恢复已取消的控件 替换状态;后续的完成不能满足旧的等待. 生成的等值排除了屏蔽等; 确定获取和真实的 HTTP 测试 包括完成/取消行为。 单独的真正的引擎预告 检查选定的等待和终止结果;取消范围是合成的.

## 停止、信号和清除

`POST /containers/<id>/stop` 记录一个已接受的停止请求而无需更改 `Running`. HTTP 请求尚待明确完成控制 完成执行,然后返回204。 已经停放的集装箱返回304. `signal` 选择请求的信号(默认配置)。 停止信号或TERM); `t` 选择超时(默认配置)。 停止时断或10秒; 负表示否 升级暂停)。 模拟器记录这些参数,用于情景检查. 它不安排实时计时器, 也不在超时时自动宣布退出 过期: 脚本优雅地完成或强制完成, 包括退出代码, 结束 `/__admin/docker/containers/<id>/complete`。允许控制延迟 终止时不编造早期 Docker 成功响应 .

`POST /containers/<id>/kill` 默认为SIGKILLL, 并保留其204个答复待决 ; 明确的 KILL/9 行为相同。 其他支持的 Linux 信号名称/数字确认交付204份,同时保留执行 状态。 固定决定了随后的流程响应. 没有主机信号 发送。 杀死一个被停止的容器返回409。 无效的杀害信号返回400; 被绑定的引擎停止信号错误和错误 `t` 返回500块。 外部超时 JavaScript 的安全整数范围返回明确模拟器-只返回 501.

`DELETE /containers/<id>` 删除已停止的记录并公布其名称(204). 运行或暂停的记录需要 `force=true`; 否则去除返回 409 . 强制删除记录意图和等待明确完成,然后删除 记录和唤醒 既退出和被移除的服务员。 强制驱逐时第二次驱逐 正在等待返回409。 种子状态 `removing` 以模拟已有去除 冲突。 失踪记录还回了404分. `v` 被接受,但没有主机卷; `link=true` 位于此子集之外,返回模拟器仅501.

`GET /__admin/docker/containers/<id>/termination` 返回最后接受的请求 (操作、数字信号、可选超时和请求时间), `removalPending`, (中文(简体) ), 财务报告和审定财务报表 `simulated: true`这些诊断领域不是多克电线领域. 取消停止/杀/取回回复只释放回复手柄。 接受意图 和运行状态幸存套接字丢失;仍然适用明确的完成,包括 等待强制驱离。 重新设置清除命名空间并取消其待决回复 . 关闭运行时间/ 服务器取消答复而不要求退出 。 接受-更改 如所述,通过共享的时线检查站,历史通过应对损失得以幸存 在下文的失败设想中.

## 控件

-   `GET /__admin/health` 报告准备情况和服务身份.
-   选择独立状态 `x-mockingbird-namespace` 或者说 `/__admin/ns/<name>/…`。 。 。 .
-   `POST /__admin/reset` 重新设置选定命名空间的记录和时间线; `?all=1` 重新设置所有命名空间 。 它保存了时钟,故障配置和日记.
-   `POST /__admin/clock` 接受共享 `set`, (中文(简体) ), `advance`,以及 `freeze` 控制系统.
-   `POST /__admin/faults` 按操作、路径或方法配置断层. `DELETE /__admin/faults` 清除他们。 道克断层预设说明如下.
-   `GET /__admin/requests` 披露元数据,从不要求机构或查询值; `DELETE /__admin/requests` 清除选定的日记.
-   `POST /__admin/checkpoints`, (中文(简体) ), `POST /__admin/branches/<name>`,以及 `POST /__admin/branches/<name>/checkout` 使用共享的时间线协调器. 没有Docker本地历史管理器。 过 `{ "checkpoint": "cp_…" }` 准备离职.

共享 `adminKey` 选项门管理路径。 多克证书命名空间 选择、网络选择和提供者证书没有配置.

## API 密码

便携 `@crvouga/mockingbird-service-docker` 条目导出 :

-   `DockerAPI`: 提供者获取处理器 `fetch`, (中文(简体) ), `reset`,以及 `close`。 。 。 .
-   `DOCKER_NAMESPACE`: 默认存储命名空间( s)`docker`) (中文(简体) ).
-   `createRuntime`:提供商外加标准的相扑鸟控制和时光线.
-   `document`:附加说明的OpenAPI合同.
-   `operationIds`:所有清点的操作ID,包括不支持的路线.
-   `supportedOperationIds`:目前已执行操作ID.

只有节点 `@crvouga/mockingbird-service-docker/server` 条目导出 :

-   `createServer`: HTTP 服务器 `runtime`, (中文(简体) ), `url`, (中文(简体) ), `port`, (中文(简体) ), `host`, (中文(简体) ), `server`, (中文(简体) ), `close`, (中文(简体) ), `attachments()`和可选 Unix `socketPath`。 。 。 .
-   `DEFAULT_PORT`: CLI默认端口,8826 (程序默认为ephemeral).
-   `serveTarget`: 共享 CLI 服务器配置.

出口类型包括: `DockerAPIOptions`, (中文(简体) ), `DockerRuntime`, (中文(简体) ), `DockerRuntimeOptions`, (中文(简体) ), `OperationId`, (中文(简体) ), `SupportedOperationId`,而节点条目的 `DockerServer` 财务报告和审定财务报表 `DockerServerOptions`, (中文(简体) ), `AttachStreamOptions`,以及 `DockerAttachment`执行文件 `mockingbird-docker` 提供 `serve`。 。 。 .

## 故意不模拟

获取附加和不支持的选项返回 Mockingbird 特定 501 JSON 错误 ; 未知路线回404路. 模拟器从不启动真实的容器或执行 命令。 节点服务器支持所记录的非TTY附加握手和 脚本双层流; 获取响应不能代表该升级 .

图像构建/推出,注册访问,执行,TTY流,日志重放,真实网络, 挂载、量、资源执行、同行证书和主机隔离 在这个包裹之外。 报告无根/ 安全设置和主机配置字段 是合成元数据。 逻辑重启控制不复制真正的守护进程 重启或恢复直播 。 没有核实倡议的协调和恢复政策.

## 失败情景和逻辑重启

每次行动 `create`, (中文(简体) ), `start`, (中文(简体) ), `stop`, (中文(简体) ), `kill`,以及 `remove`,安装 一用预设通过 `POST /__admin/faults` 与 `{"preset":"docker_<operation>_pre_failure"}` 或者说 `{"preset":"docker_<operation>_accepted_drop"}`。第一个返回前 503 变相. 第二个让验证和变异运行,捕捉接受的 在共享时间线中状态,然后删除回复。 验证失败, 无变化 操作不会变成可接受的突变。 失信后检查状态; 单凭接受并不能确定集装箱的退出或去除.

共享日记记录丢失了0级回复, `accepted: true`,则 接受 `checkpoint`集装箱身份证和故障身份证 普通拒绝的操作 不得设立验收检查站。 在终止合同之前,对终止合同的意图进行检查站检查 在等待完成之前,包括当呼叫者后来断开时.

`POST /__admin/docker/restart` 需要明确 `containers` 选择 : `"preserve"` 保留执行状态和接受意图; `"terminate"` 完成 运行容器 `exitCode` (违约137),适用待移送和 自动移动 。 取消已有的等/ 复制处理, 设置守护进程可用性到 ,并检查选中的名称空间主分支。 无效的输入更改 没什么 守护进程可用性也会在独立执行的情况下更改检查点. 这些是合成假想控制,不是声称一个真正的守护进程重启 策略或活存储配置。 没有重新启动守护进程或主机进程 .

## 节点Unix-socket 传输

方案节点条目支持 `createServer({ socketPath })` 在乌尼克斯. 在一个测试拥有的目录中提供绝对的,没有的路径(最多103个UTF-8字节). 它拒绝现有的文件, 并联和套接字, 包括 stale 套接字; 它永远不会 解开锁以腾出来. 不要使用主机引擎路径 。 操作系统 节点当 `await server.close()` 完成 。 关闭也 取消运行时间等待并销毁自有连接; 重复关闭调用共享 一个关闭操作。 测试必须关闭他们的服务器 在最后块.

使用节点 HTTP `request({ socketPath, path: "/_ping" })` 用于Unix请求。 这个 已返回 `socketPath` 确定终点; `url` 是合成的 HTTP 来源 `http://docker.mock` 财务报告和审定财务报表 `port` 为 0。对于 TCP,省略 `socketPath` 和使用情况 `host`编号 :`port` 和以前一样 合并 Unix 和 TCP 选项拒绝 。 连续保留 HTTP/1.1 要求进行两起运输。 每次连接都允许一次主动请求; 在回复结束之前将另一项请求排入管道 在发送额外请求之前。 故意下降会关闭连接 运输不重新连接客户端.

`createServer` 将身体绑定为 `maxBodyBytes` (默认 1 MiB,包括块 页:1 `bodyTimeoutMs` 收到截止日期(默认为30秒)。 拒绝 返回运输专用的413或408,并关闭连接而不援引 供应商操作。 回应等没有人为执行期限. 页眉 大小限制为 16 KiB, 信头/ 请求获得时间至 30 秒, 闲置 保持活动到5秒,同时连接到 `maxConnections` (默认) 页:1 这些限制是Mockingbird控制,而不是多克引擎等价索赔. 现有的CLI/共享机队目标仍然使用共享的TCP适配器; Unix 目前需要套接字和这些多克运输限制 `createServer`。 。 。 . 没有同行证书、 proffs 出处、 主机隔离或真正的引擎访问 权利主张。 附录框架和寿命控制说明如下.

## 节点附加握手

发送 `/v1.52/containers/<id>/attach?stream=1&stdout=1&stderr=1` 与 `Connection: Upgrade` 财务报告和审定财务报表 `Upgrade: tcp` 改为 `createServer`未转换附件 使用相同的固定合同。 反应是 `101 UPGRADED` 与 `Content-Type: application/vnd.docker.multiplexed-stream`, (中文(简体) ), `Connection: Upgrade`, (中文(简体) ), 财务报告和审定财务报表 `Upgrade: tcp`。通过第一个 CRLFCRLF 读取并保留以下所有内容 字节。 此双复式升级不能用“ 获取” 响应来表示; 普通 获取和非升级请求继续返回明确501.

`stream=true`, (中文(简体) ), `logs=false`,并接受 stdin/stdout/stder 选择 握手谈判。 TTY, 重放, 拆分 Keys, 未知的查询模式和非 TCP 升级不支持。 缺少容器和暂停/重新开始使用冲突 带有原始流内容类型的被标注的预升级纯文本错误信封. 共享命名空间,分支,断层,守护进程可用性和请求日志应用. 随附录入被记为101,本身不检查为突变.

对于协议固定装置, `attachHandshake: { chunkBytes, initialStreamBytes }` 分页头写入合成的1至4096字节块和附件,最多1个米B 已刻入到最后一个片段的字节 。 这不能保证OS包 边框。 字节是呼叫者拥有的电线固定装置,不是生成的容器 输出。 使用下面的活附件控件来构建、频道路由和脚本 斯丁语. 没有命令解释输入,有效载荷字节从不输入日记. 连接丢失不会停止容器 . 服务器关闭时拥有套接字 。 模拟器从不连接到真正的引擎; 单独引用的甲骨文执行授权提供者的比较.

## 脚本附件流

`server.attachments()` 返回当前节点拥有的控点。 每个都暴露出一个 `id`, (中文(简体) ), `containerId`公开 `namespace` 财务报告和审定财务报表 `branch`附加时 `closed`, (中文(简体) ), `stdinClosed` 财务报告和审定财务报表 `queuedBytes`。只保留该附件的手柄;它不能处理 恢复容器或在其寿命结束后重新执行.

```ts
import type { DockerServer } from "@crvouga/mockingbird-service-docker/server"

// Call after a client attaches to a running container on this server.
export async function writeAttachedOutput(server: DockerServer) {
  const [attachment] = server.attachments()
  if (attachment) {
    await attachment.write("stdout", new TextEncoder().encode("synthetic output"))
    const rawInput = attachment.takeStdin()
    await attachment.end()
    return rawInput
  }
}
```

`write("stdout" | "stderr", bytes)` 以 8 字节发布选定频道 多克头 (1/2道, 三条保留了零字节, uint32大端长) 然后是确切的有效载荷。 空帧工作; 同步写入序列化 没有框相接。 未选中的输出被忽略 。 等待每次写入 后压. `attachStreams.frameChunkBytes` 协议测试的拆分框架 (default 64 KiB); OS包边界仍然不受控制.

Incoming stdin是原始的,包括HTTP升级前读取的字节. 投入 需求 `stdin=1` 和容器 `OpenStdin=true`;否则会被忽略. `takeStdin()` 排出受限合成输入缓冲器。 没有执行程序 . 与 `StdinOnce=true`,输入 EOF 关闭型号集装箱 Stdin和检查站 该状态不宣布退出;输出可持续到明确完成. 没有StdinOnce,有效的 stdin EOF 结束附件并离开容器 输入可重复使用。 启动新执行重开模型输入 。 运输损失 单凭一己之力,就绝不是集装箱的完成.

`end()` 队列框后脚本输出 EOF 。 对于非TTY StdinOnce容器, 它保留连接直到明确的进程完成,匹配被绑定的 处理者等待. `cancel()` 立即断开这个附件。 进程 完成在队列输出后结束附件。 重设,快照恢复, 退出、合成重启和关闭 立即使受影响者失效 物理实例的手柄; 其他命名空间/空格仍然隔离。 队列 stale写着拒绝。 套接字柄和缓冲有效载荷从未被快照.

`attachStreams.maxQueuedBytes` 财务报告和审定财务报表 `maxStdinBytes` 默认为 1 MiB. 排队输出 包括帧头; 超过输出限制拒绝写入。 超过 未读 stdin 容量取消该附件 。 流限必须是正数 整数不大于16 MiB。 这些界限是模拟资源控制.

## 核查边界

`bun run build && bun test` 使用无发动机的模型合同或 证书。 生成的 OpenAPI 自平称,所有8个符合条件 计划和执行操作:列表、创建、检查、启动、信息、版本、, 继续前进,继续前进 生成的行包括出错路径; 已生效的计数 单靠它并不能成功创建或实现国家过渡。 一个种子 非空列表比较法( 非空列表比较法) 此外, 拒绝故意错误、 计程验证 执行状态。 独立的电线方案涵盖成功的突变.

`test/node-consumer.mjs` 运行在本地节点下对已建服务器条目, 一次通过回回转 TCP 一次通过测试拥有的 Unix 套接字。 它使用节点HTTP 请求保留连接和原始附件字节。 它验证丢失的创造 并启动响应、按名称查找、重复名称冲突、框架二进制 stdout/stder,生 stdin,附件丢失后继续执行,并丢失 停止/杀死/撤销反应,然后完成和重新检查。 设置和 补全使用公共仿真器管理控件; 附件控件只输出脚本 并观察合成Stdin。 公共请求元数据确认每个丢弃的变异 被接受并检查。 没有客户声称进口供应商的处理者或 内部状态。 固定器从不自动重试突变.

等待/停止/杀死/转移有确定性生命周期和电线测试,而不是 无限制的生成行走。 附加使用专用的生线测试, 因为获取 无法代表双倍的 HTTP 升级 。 被宣布的多克消费者是活口, 因此,没有SDK兼容性主张或取代了有线覆盖。 自我均等 合成消费者测试与真正的引擎差分证据是分开的 并且不核查举措的回收政策或东道方的执行.

选入 [真正的引擎预告](https://npmcn.com/package/%40crvouga/mockingbird-service-docker/ORACLE.md) 需要明确授权 当前引擎端点和永久图像。 记录的引擎 29.8.0 运行 通过了29项选定的API 1.52比较;范围见证据记录和 限制。 引擎身份字段和完整的API 1.56相容性不主张.

## 常见问题

### @crvouga/mockingbird-service-docker 是什么？

具有可移植控件和节点传输的状态多克引擎 API v1\.52模拟器\.

### 如何安装 @crvouga/mockingbird-service-docker？

在项目目录运行 npm install @crvouga/mockingbird-service-docker，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-docker，可以用 npx mockingbird-docker 直接运行。

### @crvouga/mockingbird-service-docker 支持 TypeScript 吗？

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

### @crvouga/mockingbird-service-docker 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @crvouga/mockingbird-service-docker 可以商用吗？

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

### @crvouga/mockingbird-service-docker 的下载量有多少？

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

### @crvouga/mockingbird-service-docker 还在维护吗？

最新版本 1\.11\.0 发布于 2026/11/11（今天）；至今共发布 22 个版本，其中过去 12 个月发布了 22 个；首次发布于 2026/10/05。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

