Por qué importa el motor para las pruebas
Una batería de Testcontainers inicia un Postgres, Kafka o Redis real para una clase de prueba y lo descarta después. Un Dev Container recompila y reinicia toda la cadena de herramientas de un proyecto. En ambos casos, el tiempo se va en llamadas del ciclo de vida de contenedores: crear, iniciar, detener y eliminar, una y otra vez. Esas llamadas son donde Oxcart resulta más rápido.
| Operación | Oxcart 0.1.2 | Frente al siguiente más rápido |
|---|---|---|
| Crear mediante API (sin CLI) | 2.5 ms | 7× |
| Iniciar mediante API | 18.5 ms | 2,1× |
| Detener mediante API | 4.0 ms | 21× |
| Crear e iniciar 20 contenedores | 0.69 s | 2,5× |
| Detener y eliminar 20 contenedores | 77 ms | 8,9× |
docker run --rm … true | 42 ms | 3,4× |
Oxcart 0.1.2 medido el 2026-10-10 con su cliente docker 29.9 incluido; los otros entornos se midieron antes ese mismo día en el mismo Mac y con el mismo sistema de medición, con docker 29.4. Apple M5 Max, 8 CPU y 12 GiB cada uno, un entorno a la vez, medianas de cinco muestras. Tabla completa: comparativas.
Conectar Dev Containers y Testcontainers a Oxcart
- Instala y abre Oxcart. La configuración crea un contexto Docker llamado
oxcart. Solo lo convierte en el actual cuando no se usa ningún otro, así que compruébalo condocker context show. - Dirige el comando docker a Oxcart. Ejecuta
docker context use oxcarto activa Use Oxcart for the docker command en Settings › Command line tools. Desactivarlo restaura el contexto que tenías antes. - Proporciona el socket a los frameworks de pruebas. Para herramientas que leen
DOCKER_HOSTen lugar de contextos Docker, expórtalo desde el contexto:export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}'). - Ejecuta tus pruebas. Ejecuta tu batería de pruebas como siempre. Testcontainers crea, inicia y elimina sus contenedores mediante la API Docker Engine.
- Abre el Dev Container. Abre el proyecto en su Dev Container o ejecuta
devcontainer up --workspace-folder .con la CLI de Dev Containers.
Testcontainers
Las bibliotecas Testcontainers (Java, Go, Node, Python, .NET y las demás) se comunican directamente con la API Docker Engine, sin pasar por la CLI docker. Oxcart negocia la versión 1.54 de la API y acepta de 1.40 a 1.54, así que las versiones actuales de Testcontainers se conectan sin ajustes especiales en cuanto encuentran el socket.
Encontrar el socket
Testcontainers consulta primero DOCKER_HOST. El socket de Oxcart está en su carpeta privada de estado, con modo 0600, y su ruta se almacena en el contexto Docker oxcart. Expórtalo una vez por shell o establécelo en la configuración de pruebas de tu IDE:
export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')
./gradlew test # or: mvn verify, go test ./..., pytest, npm test Contenedores auxiliares y el socket dentro de contenedores
Testcontainers inicia un pequeño contenedor auxiliar que limpia después de ejecuciones de pruebas que han fallado, y algunas configuraciones ejecutan las pruebas dentro de un contenedor. Ambos montan el socket Docker. En Oxcart, -v /var/run/docker.sock:/var/run/docker.sock proporciona a un contenedor la misma API Docker desde el entorno Linux, para que los contenedores auxiliares, docker-outside-of-docker, Portainer y Traefik funcionen como esperan. Si una herramienta intenta montar dentro de un contenedor la ruta DOCKER_HOST del lado del Mac, el ajuste estándar TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE de Testcontainers le indica que monte /var/run/docker.sock.
Imágenes compiladas desde un Dockerfile
Testcontainers puede compilar una imagen desde un Dockerfile en tu prueba (ImageFromDockerfile y sus equivalentes). Esto usa el endpoint de compilación de la API Engine, que Oxcart ejecuta sobre BuildKit, con contextos tar (sin comprimir y gzip), argumentos de compilación, labels y varias etiquetas.
Dev Containers
Un Dev Container describe la cadena de herramientas de un proyecto como un contenedor, y las herramientas Dev Containers (la extensión de VS Code, la CLI devcontainer y los editores que la usan) lo compilan y ejecutan mediante la CLI docker. Con oxcart como contexto actual, quien lo hace es Oxcart.
Abre tu proyecto con su cadena de herramientas y servicios de apoyo juntos. La CLI de Dev Containers inicia el espacio de trabajo junto a servicios como Postgres y Redis; tu usuario node sin privilegios de root puede editar el espacio de trabajo, y el script posterior a la creación prepara las dependencias del proyecto. Tus compañeros obtienen el mismo entorno con la misma configuración.
npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash Consejos para Dev Containers en equipos con chip de Apple
- Arquitectura: la mayoría de las imágenes base de Dev Containers publica arm64. Si una imagen solo está disponible para amd64, Oxcart la ejecuta mediante Rosetta; consulta Docker Compose en equipos con chip de Apple.
- Dependencias en volúmenes: coloca
node_modules, las cachés de paquetes y los datos de bases de datos en volúmenes con nombre, y conserva el código fuente en el espacio de trabajo montado mediante bind mount. - Monitorización de archivos: los cambios hechos en el Mac no generan eventos inotify dentro de los contenedores, así que un monitor que se ejecute en el contenedor debe usar consultas periódicas.
- Agentes de programación: un agente dentro de un Dev Container mantiene su shell en el contenedor del proyecto; un agente en el Mac puede inspeccionar los servicios del Dev Container mediante el servidor MCP de Oxcart (Docker para agentes de programación con IA).
El contexto Docker, sin sorpresas
Oxcart crea su contexto oxcart durante la configuración y solo lo convierte en el actual cuando no te quita nada: cuando el contexto actual es default y nada responde en su socket. En caso contrario, se mantiene tu contexto actual. En Settings › Command line tools está Use Oxcart for the docker command, que cambia a oxcart y recuerda el contexto que sustituye; desactivarlo vuelve al anterior. Oxcart nunca crea ni sustituye /var/run/docker.sock en tu Mac y su API nunca está expuesta por TCP.
Preguntas
¿Testcontainers funciona en Mac con chip de Apple y Oxcart?
Sí. Testcontainers se comunica con la API Docker Engine, que Oxcart implementa (versiones de API de 1.40 a 1.54), incluido el endpoint de compilación que Testcontainers usa para imágenes creadas desde un Dockerfile. Los contenedores también pueden montar el socket Docker en /var/run/docker.sock, como esperan los contenedores auxiliares de Testcontainers.
¿Cómo establezco DOCKER_HOST para Testcontainers?
Lee su valor en el contexto Docker oxcart: docker context inspect oxcart --format '{{.Endpoints.docker.Host}}' imprime una ruta unix://. Expórtala como DOCKER_HOST en tu shell o en la configuración de ejecución de pruebas de tu IDE.
¿Por qué son más rápidas mis pruebas de integración con Oxcart?
Las baterías de pruebas pasan gran parte del tiempo creando, iniciando, deteniendo y eliminando contenedores. En el mismo Mac, Oxcart registró 2.5 ms por creación mediante API, 18.5 ms por arranque mediante API, 4.0 ms por parada mediante API y 77 ms para detener y eliminar 20 contenedores: los mejores resultados de los tres entornos que probamos en cada operación.
¿VS Code Dev Containers funciona con Oxcart?
La CLI de Dev Containers 0.89.0 compiló e inició una configuración real de varios servicios en Oxcart, con Postgres y Redis saludables y un espacio de trabajo en el que el usuario del contenedor podía escribir. Las herramientas Dev Containers controlan la CLI docker, así que dirígela a Oxcart con el contexto oxcart.
¿docker-outside-of-docker funciona en un Dev Container?
Sí. Monta /var/run/docker.sock dentro del contenedor y su CLI docker se comunicará con el mismo motor. Los endpoints privados de Oxcart rechazan el acceso desde ese socket, así que un contenedor puede administrar contenedores, pero no acceder a los componentes internos de Oxcart.
¿Oxcart sustituirá /var/run/docker.sock en mi Mac?
No. Oxcart nunca crea ni sustituye /var/run/docker.sock en el Mac. Los clientes acceden mediante el contexto Docker oxcart o la ruta del socket que indica ese contexto.
Fuentes y método
- Compatibilidad: integraciones verificadas de Oxcart (compilación mediante la API Engine usada por docker-py y Testcontainers, CLI de Dev Containers 0.89.0 y socket Docker dentro de contenedores) y rango de versiones de la API.
- Selección del contexto Docker y configuración de línea de comandos: Oxcart tal como se distribuye.
- Cifras de velocidad: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPU y 12 GiB; los otros entornos se midieron antes ese mismo día en el mismo Mac, con el mismo sistema de medición y el cliente docker 29.4.