开始之前
- 一台运行 macOS 26 或更高版本的 Apple 芯片 Mac。
- 保持其他应用运行,以便复制镜像和卷时,其上下文能够响应。
- 列出真正需要的内容:无法重新拉取的镜像,以及存有数据(数据库、上传文件)的命名卷。其他内容重新创建更快。
- 先选择一个有代表性的 Compose 项目试迁移。确认服务能启动、数据存在、已发布端口能响应,再迁移其余项目。
逐步迁移到 Oxcart
- 安装 Oxcart。 下载 Oxcart(Apple 芯片,macOS 26 或更高版本)并打开。设置可离线完成,只需几秒;用于链接命令行工具的辅助程序需要输入一次管理员密码。
- 决定如何处理 docker 工具。 如果 Docker Desktop 或 OrbStack 已安装
docker,Oxcart 会列出每个工具的两个版本,替换前征求确认。Replace 默认开启;Uninstall 会恢复其他应用的工具。 - 选择 oxcart 上下文。 设置会创建
oxcartDocker 上下文。仅当当前上下文为default且无响应时,才将它设为当前上下文。因此,从其他应用迁移时,通常需自行运行docker context use oxcart。 - 迁移所需镜像。 重新拉取,或将其他应用的
docker save输出流式传入docker load,以保留标签和摘要。 - 迁移存有数据的卷。 在其他应用中通过小型容器将每个命名卷打包成 tar 文件,再解包到 Oxcart 的新卷中。
- 启动 Compose 项目。 在每个项目文件夹中运行
docker compose up -d --wait。以相同名称迁移的卷会被自动使用。 - 将固定连接地址的工具指向 Oxcart。 遵循 Docker 上下文的工具会自动找到 Oxcart。仅读取
DOCKER_HOST的工具,需要将该变量设为oxcart上下文的端点。
命令
查看上下文并切换
docker context ls 列表会显示 oxcart 和其他应用的上下文,当前上下文旁有星号。接着:
docker context use oxcart 从其他应用复制镜像
无需中间文件,将镜像从一个引擎直接流式传输到另一个引擎。标签和摘要会一并保留。
# OTHER is the other app's context name from `docker context ls`
OTHER=<other-context>
docker --context "$OTHER" save postgres:17-alpine myapp:dev | docker --context oxcart load 一次迁移所有带标签的镜像:
docker --context "$OTHER" images --format '{{.Repository}}:{{.Tag}}' | grep -v '<none>' \
| xargs docker --context "$OTHER" save | docker --context oxcart load 由 Dockerfile 构建的镜像,通常在 Oxcart 中用 docker build 或 docker compose build 重新构建更快;我们的基准测试中,利用缓存重新构建仅需 121 ms。
迁移命名卷
此示例迁移名为 pgdata 的 Postgres 卷。它将 tar 文件写入用户主文件夹下的一个文件夹:Oxcart 默认将主文件夹共享给容器,其他应用也需能对其进行绑定挂载。先停止使用该卷的容器,以确保复制的数据一致。
mkdir -p ~/volume-move && cd ~/volume-move
# 1. Pack the volume in the other app
docker --context "$OTHER" run --rm -v pgdata:/from -v "$PWD":/backup alpine \
tar -C /from -czf /backup/pgdata.tgz .
# 2. Unpack it into a new volume in Oxcart
docker --context oxcart volume create pgdata
docker --context oxcart run --rm -v pgdata:/to -v "$PWD":/backup alpine \
tar -C /to -xzf /backup/pgdata.tgz Compose 的卷名称格式为 <project>_<volume>。在 Oxcart 中用相同的完整名称创建卷(可在其他上下文运行 docker volume ls 查看),Compose 就会使用它。
启动 Compose 项目
cd ~/code/myproject
docker compose up -d --wait 健康检查依赖、up --wait、服务名 DNS、init: true 和 network_mode: service: 均可照常使用。参见 Apple 芯片上的 Docker Compose。
读取 DOCKER_HOST 的工具
Oxcart 从不创建或替换 /var/run/docker.sock;docker CLI、Compose、Buildx 和大多数 SDK 都遵循当前上下文。如果工具仅读取 DOCKER_HOST,请将其指向 Oxcart:
export DOCKER_HOST="$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')" 在容器内,Testcontainers、docker-outside-of-docker、Portainer 和 Traefik 可照常挂载 /var/run/docker.sock。参见 Mac 上的 Dev Containers 和 Testcontainers。
切回原工具
docker context use <other-context> # back to the other app
docker context use oxcart # and to Oxcart again 切换后会有哪些变化
| 操作 | Oxcart 0.1.2 | OrbStack 2.2.3 | Docker Desktop 4.94.0 |
|---|---|---|---|
docker run --rm … true | 42.3 ms | 220 ms | 143 ms |
docker stop | 19.2 ms | 107 ms | 128 ms |
| 停止并删除 20 个容器 | 76.7 ms | 1,224 ms | 683 ms |
| 使用缓存构建 | 121 ms | 283 ms | 149 ms |
Oxcart 0.1.2 于 2026-10-10 使用随附的 docker 29.9 客户端测量;OrbStack 2.2.3 和 Docker Desktop 4.94.0 于同日较早时间,使用同一台 Mac、同一套测试工具和 docker 29.4 测量。完整表格:与 Docker Desktop 对比及与 OrbStack 对比。
此外,还有面向编程智能体的本地 MCP 服务器(粘贴一次即可设置)、按仓库和分支分组的端口,以及遵循 VPN、DNS 和防火墙规则的容器流量(网络指南)。
常见问题
需要先卸载 Docker Desktop 或 OrbStack 吗?
不需要。Oxcart 可与它们并存,并使用自己的 oxcart Docker 上下文。用 docker context use 切换即可。在迁移完所需内容之前,请保留其他应用。
Oxcart 会改变当前 Docker 上下文吗?
仅当当前上下文是 default 且无响应时才会更改。如果当前使用其他应用的上下文,Oxcart 会保持原样,由你通过 docker context use oxcart 选择。
镜像和卷会自动迁移吗?
不会。各应用分别保存自己的镜像和卷。重新拉取镜像,或通过 docker save | docker load 流式传输;存有数据的命名卷则按上文所示用 tar 文件迁移。存有缓存或其他临时数据的卷可直接重新创建。
镜像仓库登录信息如何处理?
如果拉取时要求凭据,运行一次 docker login。Oxcart 通过 docker-credential-osxkeychain 将密码存储在 macOS 钥匙串中;config.json 仅保存仓库名称。
可以保留现有开发工作流吗?
可以。继续使用 docker CLI、Compose、Buildx、Dev Containers 和 Testcontainers。Oxcart 支持特权容器,包括 Compose 中的 privileged: true。先迁移一个项目,检查其端口和数据,再在准备好后切换其余项目。整个过程中,其他 Docker 上下文始终可用。
更新会保留容器吗?
会。Oxcart 更新会保留所有容器、镜像、卷和网络。
如何切回?
使用其他应用的上下文名称运行 docker context use。如果卸载 Oxcart,Uninstall 会恢复它曾替换的所有 docker 工具。
来源与方法
- 设置、命令行工具和 Docker 上下文:以发布的 Oxcart 0.1.3 为准。
- 兼容性:2026-10-10 在 Oxcart 上测试(保留标签与摘要的保存和加载、Compose、容器内 Docker 套接字)。
- 基准测试:Oxcart 0.1.2、OrbStack 2.2.3 和 Docker Desktop 4.94.0,于 2026-10-10 在同一台 Apple M5 Max 上测量,各配置 8 个 CPU 和 12 GB,每次仅运行一款产品,五次采样的中位数。
- 其他应用的上下文名称因应用和版本而异:请通过
docker context ls查看。