Oxcart 下载
菜单

Mac 上的 Dev Containers 和 Testcontainers

让项目环境保持一致,让集成测试更快。Oxcart 通过你熟悉的 Docker 工具,在 Apple 芯片 Mac 上运行 Dev Containers 和 Testcontainers。实测每次 API 创建为 2.5 ms,拆除 20 个容器为 77 ms,均是我们测试的三款运行时中最快的,让一次性测试环境减少等待。

更新于

为什么引擎会影响测试

Testcontainers 测试套件会为测试类启动真正的 Postgres、Kafka 或 Redis,结束后将其丢弃。Dev Container 会重建并重启项目的整套工具链。两者的时间都花在反复创建、启动、停止和移除容器的生命周期调用上,而这些调用正是 Oxcart 最快的地方。

测试套件执行的容器生命周期调用,在 Oxcart 中测量
操作Oxcart 0.1.2与次快工具相比
通过 API 创建(不经过 CLI)2.5 ms7×
通过 API 启动18.5 ms2.1×
通过 API 停止4.0 ms21×
创建并启动 20 个容器0.69 s2.5×
停止并删除 20 个容器77 ms8.9×
docker run --rm … true42 ms3.4×

Oxcart 0.1.2 于 2026-10-10 使用随附的 docker 29.9 客户端测量;其他运行时于同日较早时间,使用同一台 Mac、同一套测试工具和 docker 29.4 测量。Apple M5 Max,各配置 8 个 CPU 和 12 GiB,每次仅运行一款运行时,五次采样取中位数。完整表格:比较页面。

将 Dev Containers 和 Testcontainers 连接到 Oxcart

  1. 安装并打开 Oxcart。 设置会创建名为 oxcart 的 Docker 上下文。仅在没有使用其他上下文时才将其设为当前上下文,因此请用 docker context show 检查。
  2. 将 docker 命令指向 Oxcart。 运行 docker context use oxcart,或在 Settings › Command line tools 中开启 Use Oxcart for the docker command。关闭后会恢复之前的上下文。
  3. 为测试框架提供套接字。 对于读取 DOCKER_HOST 而非 Docker 上下文的工具,从上下文导出它:export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')。
  4. 运行测试。 照常运行测试套件。Testcontainers 会通过 Docker Engine API 创建、启动和移除容器。
  5. 打开 Dev Container。 在项目的 Dev Container 中打开项目,或使用 Dev Containers CLI 运行 devcontainer up --workspace-folder .。

Testcontainers

Testcontainers 库(Java、Go、Node、Python、.NET 等)直接与 Docker Engine API 通信,而非通过 docker CLI。Oxcart 协商的 API 版本为 1.54,并接受 1.40 至 1.54,因此当前 Testcontainers 版本只要找到套接字,无需特殊设置即可连接。

查找套接字

Testcontainers 优先查看 DOCKER_HOST。Oxcart 的套接字位于私有状态文件夹中,权限为 0600,路径保存在 oxcart Docker 上下文内。每个 shell 导出一次,或在 IDE 的测试配置中设置:

export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')
./gradlew test        # or: mvn verify, go test ./..., pytest, npm test

辅助容器与容器内套接字

Testcontainers 会启动一个小型辅助容器,在测试运行崩溃后进行清理;有些配置则在容器内运行测试。两者都会挂载 Docker 套接字。在 Oxcart 中,-v /var/run/docker.sock:/var/run/docker.sock 让容器从 Linux 一侧内部访问同一 Docker API,因此辅助容器、docker-outside-of-docker、Portainer 和 Traefik 均可按预期运行。如果工具尝试将 Mac 端的 DOCKER_HOST 路径挂载进容器,Testcontainers 的标准设置 TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE 可告知它改为挂载 /var/run/docker.sock。

从 Dockerfile 构建的镜像

Testcontainers 可以在测试中从 Dockerfile 构建镜像(ImageFromDockerfile 及其对应功能)。这会使用 Engine API 的构建端点,Oxcart 基于 BuildKit 实现该端点,支持 tar 上下文(普通和 gzip)、构建参数、标签元数据和多个镜像标签。

Dev Containers

Dev Container 用容器定义项目工具链,Dev Containers 工具(VS Code 扩展、devcontainer CLI 及使用它的编辑器)通过 docker CLI 构建并运行它。将 oxcart 设为当前上下文后,执行这些操作的就是 Oxcart。

连同工具链和配套服务一起打开项目。Dev Containers CLI 会将工作区与 Postgres、Redis 等服务一并启动;非 root 的 node 用户可编辑工作区,项目的创建后脚本会准备依赖。团队成员通过同一份配置获得相同环境。

npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash

Apple 芯片上使用 Dev Containers 的建议

  • 架构:大多数 Dev Container 基础镜像提供 arm64 版本。对于仅支持 amd64 的镜像,Oxcart 通过 Rosetta 运行;参见 Apple 芯片上的 Docker Compose。
  • 将依赖放在卷中:把 node_modules、软件包缓存和数据库数据放在命名卷中,源代码则留在绑定挂载的工作区。
  • 文件监视:Mac 上的编辑不会在容器内产生 inotify 事件,因此容器内运行的监视器应使用轮询。
  • 编程智能体:在 Dev Container 内运行的智能体,其 shell 保持在项目容器内;在 Mac 上运行的智能体可通过 Oxcart 的 MCP 服务器检查 Dev Container 的服务(面向 AI 编程智能体的 Docker)。

Docker 上下文,行为清晰可控

Oxcart 在设置时创建 oxcart 上下文,只有不会影响已有使用时才将其设为当前上下文:即当前上下文为 default 且其套接字无响应。其他情况下会保留当前上下文。Settings › Command line tools 中的 Use Oxcart for the docker command 可切换到 oxcart 并记住原上下文;关闭后即可切回。Oxcart 从不在 Mac 上创建或替换 /var/run/docker.sock,API 也从不通过 TCP 开放。

常见问题

Testcontainers 能在 Apple 芯片 Mac 上通过 Oxcart 使用吗?

可以。Testcontainers 与 Oxcart 实现的 Docker Engine API(版本 1.40 至 1.54)通信,包括 Testcontainers 从 Dockerfile 构建镜像时使用的构建端点。容器也可在 /var/run/docker.sock 挂载 Docker 套接字,这正是 Testcontainers 辅助容器所预期的位置。

如何为 Testcontainers 设置 DOCKER_HOST?

从 oxcart Docker 上下文读取:docker context inspect oxcart --format '{{.Endpoints.docker.Host}}' 会输出 unix:// 路径。在 shell 或 IDE 的测试运行配置中将其导出为 DOCKER_HOST。

为什么使用 Oxcart 后集成测试更快?

测试套件的大量时间用于创建、启动、停止和移除容器。在同一台 Mac 上,Oxcart 实测每次 API 创建 2.5 ms、API 启动 18.5 ms、API 停止 4.0 ms,停止并移除 20 个容器 77 ms:每项都是我们测试的三款运行时中最快的。

VS Code Dev Containers 支持 Oxcart 吗?

Dev Containers CLI 0.89.0 在 Oxcart 上构建并启动了真实的多服务配置,Postgres 和 Redis 均健康,容器用户可写入工作区。Dev Containers 工具通过 docker CLI 工作,因此请用 oxcart 上下文将 CLI 指向 Oxcart。

Dev Container 中能使用 docker-outside-of-docker 吗?

可以。将 /var/run/docker.sock 挂载到容器中,容器内的 docker CLI 就能与同一引擎通信。Oxcart 的私有端点会拒绝通过该套接字的访问,因此容器可以管理容器,但无法访问 Oxcart 自身内部功能。

Oxcart 会替换 Mac 上的 /var/run/docker.sock 吗?

不会。Oxcart 从不在 Mac 上创建或替换 /var/run/docker.sock。客户端通过 oxcart Docker 上下文或该上下文指定的套接字路径访问引擎。

来源与方法

  • 兼容性:Oxcart 已验证的集成路径(docker-py 和 Testcontainers 使用的 Engine API 构建、Dev Containers CLI 0.89.0、容器内 Docker 套接字)及 API 版本范围。
  • Docker 上下文选择与命令行设置:以发布版 Oxcart 为准。
  • 速度数据:Oxcart 0.1.2,2026-10-10,Apple M5 Max,8 个 CPU 和 12 GiB;其他运行时于同日较早时间,使用同一台 Mac、同一套测试工具和 docker 29.4 客户端测量。

在你自己的项目中试用 Oxcart

免费试用 60 天。之后每位用户、每个主版本 $20,无需订阅。

Apple silicon · macOS 26 或更新版本

继续阅读

版本更新说明

Oxcart 0.1.4

最新版本

许可证功能与细节改进。

  • 通过安全邮件链接激活许可证。
  • 在 Settings 中管理许可证和 Mac。
  • 离线验证许可证。
  • 性能提升、界面优化与问题修复。

需要 macOS 26.0 或更高版本

Oxcart 0.1.3

空闲时回收内存。

  • 没有容器运行时回收 VM 内存。
  • 保留容器、镜像、卷和网络。

需要 macOS 26.0 或更高版本

Oxcart 0.1.2

命令行工具集成。

  • 在 Oxcart 自带的 Docker 工具与已安装的 Docker 工具之间切换。
  • 界面优化。

需要 macOS 26.0 或更高版本

Oxcart 0.1.1

内置 Docker 工具与智能体控制。

  • 自带 Docker CLI 29.9、Compose 5.6 和 Buildx 0.38。
  • Docker 上下文集成与安全的钥匙串凭据存储。
  • MCP 智能体连接,支持为各智能体设置权限或阻止访问。

需要 macOS 26.0 或更高版本

Oxcart 0.1.0

适用于 Apple 芯片的 Docker 兼容容器。

  • 兼容 Docker CLI、Compose 和 Buildx。
  • 自带运行时组件,可离线设置。
  • 按项目和 Git 分支整理端口。
  • MCP 集成,默认仅允许只读访问。
  • 经过验证的自动更新。

需要 macOS 26.0 或更高版本