Перед началом
- Mac с Apple silicon и macOS 26 или новее.
- Другое приложение должно работать, чтобы его контекст отвечал во время копирования образов и томов.
- Список того, что действительно нужно: образы, которые нельзя скачать снова, и именованные тома с данными (базы данных, загруженные файлы). Всё остальное быстрее создать заново.
- Сначала попробуйте один типичный проект Compose. Убедитесь, что сервисы запускаются, данные на месте, а опубликованные порты отвечают, прежде чем переносить остальные проекты.
Пошаговый переход на Oxcart
- Установите Oxcart. Скачайте Oxcart (Apple silicon, macOS 26 или новее) и откройте его. Настройка работает без интернета и занимает секунды; пароль администратора запрашивается один раз для помощника, создающего ссылки на инструменты командной строки.
- Решите, заменять ли инструменты docker. Если Docker Desktop или OrbStack установил
docker, Oxcart показывает обе версии каждого инструмента и спрашивает перед заменой. Replace включён по умолчанию; Uninstall возвращает инструменты другого приложения. - Выберите контекст oxcart. При настройке создаётся контекст Docker
oxcart. Он становится текущим, только если текущий контекст —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.
Перенесите именованный том
В этом примере переносится том Postgres с именем pgdata. Tar-архив записывается в папку внутри вашей домашней папки: Oxcart по умолчанию предоставляет контейнерам доступ к домашней папке, и другое приложение тоже должно уметь подключать её через bind mount. Сначала остановите использующие том контейнеры, чтобы копия была согласованной.
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: работают как прежде. См. Docker Compose на Apple silicon.
Инструменты, читающие DOCKER_HOST
Oxcart никогда не создаёт и не заменяет /var/run/docker.sock; CLI docker, Compose, Buildx и большинство SDK учитывают текущий контекст. Если инструмент читает только DOCKER_HOST, направьте его на Oxcart:
export DOCKER_HOST="$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')" Внутри контейнеров монтирование /var/run/docker.sock работает как обычно для Testcontainers, docker-outside-of-docker, Portainer и Traefik. См. Dev Containers и Testcontainers на Mac.
Переключитесь обратно
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 устанавливается рядом с ними со своим контекстом Docker oxcart. Переключайтесь через docker context use. Оставьте другое приложение установленным, пока не перенесёте всё нужное.
Изменит ли Oxcart мой текущий контекст Docker?
Только если текущий контекст — default и на нём ничто не отвечает. Если текущим выбран контекст другого приложения, Oxcart не меняет его; вы сами переключаетесь командой docker context use oxcart.
Переносятся ли образы и тома автоматически?
Нет. Каждое приложение хранит собственные образы и тома. Скачайте образы заново или передайте их через docker save | docker load; именованные тома с данными перенесите с помощью tar-архива, как показано выше. Тома с кешами или другими временными данными можно просто создать заново.
Что будет с учётными данными реестров?
Если при скачивании запрашиваются учётные данные, один раз выполните docker login. Oxcart хранит пароль в Связке ключей macOS через docker-credential-osxkeychain; в config.json остаётся только имя реестра.
Можно ли сохранить привычный процесс разработки?
Да. Продолжайте использовать CLI docker, Compose, Buildx, Dev Containers и Testcontainers. Oxcart поддерживает привилегированные контейнеры, в том числе privileged: true в Compose. Сначала перенесите один проект, проверьте его порты и данные, затем переходите к остальным, когда будете готовы. Другой контекст Docker остаётся доступным на протяжении всего перехода.
Сохраняются ли контейнеры при обновлении?
Да. При обновлении Oxcart сохраняются все контейнеры, образы, тома и сети.
Как вернуться обратно?
Выполните docker context use с именем контекста другого приложения. При удалении Oxcart действие Uninstall восстанавливает все заменённые им инструменты docker.
Источники и методика
- Настройка, инструменты командной строки и контекст Docker: поставляемая версия Oxcart 0.1.3.
- Совместимость: проверена на Oxcart, 2026-10-10 (save и load с сохранением тегов и дайджестов, 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.