Warum die Engine für Tests wichtig ist
Eine Testcontainers-Testsuite startet ein echtes Postgres, Kafka oder Redis für eine Testklasse und verwirft es danach. Ein Dev Container baut die gesamte Werkzeugkette eines Projekts neu und startet sie erneut. In beiden Fällen fließt Zeit in Aufrufe des Container-Lebenszyklus: erstellen, starten, stoppen, entfernen, immer wieder. Bei diesen Aufrufen ist Oxcart am schnellsten.
| Vorgang | Oxcart 0.1.2 | Gegenüber dem Nächstschnellsten |
|---|---|---|
| Erstellen per API (ohne CLI) | 2.5 ms | 7× |
| Starten per API | 18.5 ms | 2,1× |
| Stoppen per API | 4.0 ms | 21× |
| 20 Container erstellen und starten | 0.69 s | 2,5× |
| 20 Container stoppen und entfernen | 77 ms | 8,9× |
docker run --rm … true | 42 ms | 3,4× |
Oxcart 0.1.2 wurde am 2026-10-10 mit dem mitgelieferten docker-Client 29.9 gemessen; die anderen Laufzeitumgebungen früher am selben Tag auf demselben Mac mit demselben Messaufbau und docker 29.4. Apple M5 Max, jeweils 8 CPUs und 12 GiB, eine Laufzeitumgebung nach der anderen, Mediane aus fünf Messungen. Vollständige Tabelle: Vergleiche.
Dev Containers und Testcontainers mit Oxcart verbinden
- Installiere und öffne Oxcart. Die Einrichtung erstellt einen Docker-Kontext namens
oxcart. Er wird nur dann aktuell, wenn nichts anderes verwendet wird; prüfe das mitdocker context show. - Richte den Befehl docker auf Oxcart aus. Führe
docker context use oxcartaus oder aktiviere Use Oxcart for the docker command unter Settings › Command line tools. Beim Ausschalten wird dein vorheriger Kontext wiederhergestellt. - Gib Testframeworks den Socket. Für Werkzeuge, die
DOCKER_HOSTstatt Docker-Kontexten auslesen, exportiere ihn aus dem Kontext:export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}'). - Führe deine Tests aus. Starte deine Testsuite wie gewohnt. Testcontainers erstellt, startet und entfernt seine Container über die Docker-Engine-API.
- Öffne den Dev Container. Öffne das Projekt in seinem Dev Container oder führe mit der Dev-Containers-CLI
devcontainer up --workspace-folder .aus.
Testcontainers
Testcontainers-Bibliotheken (Java, Go, Node, Python, .NET und die übrigen) kommunizieren direkt mit der Docker-Engine-API, nicht über die docker-CLI. Oxcart handelt API-Version 1.54 aus und akzeptiert 1.40 bis 1.54. Aktuelle Testcontainers-Versionen verbinden sich daher ohne besondere Einstellungen, sobald sie den Socket finden.
Den Socket finden
Testcontainers prüft zuerst DOCKER_HOST. Oxcarts Socket liegt in seinem privaten Zustandsordner mit Modus 0600; sein Pfad ist im Docker-Kontext oxcart gespeichert. Exportiere ihn einmal pro Shell oder setze ihn in der Testkonfiguration deiner IDE:
export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')
./gradlew test # or: mvn verify, go test ./..., pytest, npm test Hilfscontainer und der Socket in Containern
Testcontainers startet einen kleinen Hilfscontainer, der nach abgestürzten Testläufen aufräumt. Manche Konfigurationen führen Tests zudem in einem Container aus. Beide binden den Docker-Socket ein. In Oxcart gibt -v /var/run/docker.sock:/var/run/docker.sock einem Container dieselbe Docker-API von der Linux-Seite aus, damit Hilfscontainer, docker-outside-of-docker, Portainer und Traefik wie erwartet funktionieren. Wenn ein Werkzeug stattdessen den Mac-seitigen Pfad aus DOCKER_HOST in einen Container einbinden möchte, weist Testcontainers' Standardeinstellung TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE es an, /var/run/docker.sock einzubinden.
Images aus einem Dockerfile bauen
Testcontainers kann in deinem Test ein Image aus einem Dockerfile bauen (ImageFromDockerfile und die entsprechenden Varianten). Dafür wird der Build-Endpunkt der Engine-API verwendet, den Oxcart auf BuildKit ausführt, mit tar-Kontexten (unkomprimiert und gzip), Build-Argumenten, Labels und mehreren Tags.
Dev Containers
Ein Dev Container beschreibt die Werkzeugkette eines Projekts als Container. Die Dev-Containers-Werkzeuge (VS-Code-Erweiterung, devcontainer-CLI und die Editoren, die sie verwenden) bauen und starten ihn über die docker-CLI. Wenn oxcart der aktuelle Kontext ist, übernimmt Oxcart das.
Öffne dein Projekt gemeinsam mit seiner Werkzeugkette und unterstützenden Diensten. Die Dev-Containers-CLI startet den Workspace zusammen mit Services wie Postgres und Redis; dein nicht privilegierter Benutzer node kann den Workspace bearbeiten, und das Post-Create-Skript des Projekts richtet seine Abhängigkeiten ein. Teammitglieder erhalten mit derselben Konfiguration dieselbe Umgebung.
npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash Tipps für Dev Containers auf Apple-Chips
- Architektur: Die meisten Dev-Container-Basisimages bieten arm64 an. Ein nur für amd64 verfügbares Image führt Oxcart über Rosetta aus; siehe Docker Compose auf Apple-Chips.
- Abhängigkeiten in Volumes: Lege
node_modules, Paket-Caches und Datenbankdaten in benannte Volumes und behalte den Quellcode im per Bind-Mount eingebundenen Workspace. - Dateiüberwachung: Änderungen auf dem Mac erzeugen keine inotify-Ereignisse in Containern. Ein im Container laufender Dateiwächter sollte daher Polling verwenden.
- Coding-Agenten: Ein Agent in einem Dev Container hält seine Shell im Container des Projekts; ein Agent auf dem Mac kann die Services des Dev Containers über Oxcarts MCP-Server untersuchen (Docker für KI-Coding-Agenten).
Der Docker-Kontext ohne Überraschungen
Oxcart erstellt seinen Kontext oxcart bei der Einrichtung und aktiviert ihn nur, wenn dadurch nichts von dir verdrängt wird: wenn der aktuelle Kontext default ist und an seinem Socket nichts antwortet. Andernfalls bleibt dein aktueller Kontext erhalten. Unter Settings › Command line tools findest du Use Oxcart for the docker command. Das wechselt zu oxcart und merkt sich den ersetzten Kontext; beim Ausschalten wird zurückgewechselt. Oxcart erstellt oder ersetzt niemals /var/run/docker.sock auf deinem Mac, und seine API ist nie über TCP verfügbar.
Fragen
Funktioniert Testcontainers mit Oxcart auf Macs mit Apple-Chip?
Ja. Testcontainers kommuniziert mit der Docker-Engine-API, die Oxcart implementiert (API-Versionen 1.40 bis 1.54), einschließlich des Build-Endpunkts für Images aus Dockerfiles. Container können den Docker-Socket außerdem unter /var/run/docker.sock einbinden, wie es die Hilfscontainer von Testcontainers erwarten.
Wie setze ich DOCKER_HOST für Testcontainers?
Lies den Wert aus dem Docker-Kontext oxcart: docker context inspect oxcart --format '{{.Endpoints.docker.Host}}' gibt einen unix://-Pfad aus. Exportiere ihn als DOCKER_HOST in deiner Shell oder in der Testausführungskonfiguration deiner IDE.
Warum sind meine Integrationstests mit Oxcart schneller?
Testsuiten verbringen viel Zeit damit, Container zu erstellen, zu starten, zu stoppen und zu entfernen. Auf demselben Mac erreichte Oxcart 2.5 ms pro API-Erstellung, 18.5 ms pro API-Start, 4.0 ms pro API-Stopp und 77 ms zum Stoppen und Entfernen von 20 Containern: jeweils am schnellsten unter den drei getesteten Laufzeitumgebungen.
Funktionieren VS Code Dev Containers mit Oxcart?
Die Dev-Containers-CLI 0.89.0 baute und startete auf Oxcart eine echte Konfiguration mit mehreren Services, gesundem Postgres und Redis sowie einem Workspace, den der Containerbenutzer beschreiben konnte. Dev-Containers-Werkzeuge steuern die docker-CLI. Richte die CLI daher über den Kontext oxcart auf Oxcart aus.
Funktioniert docker-outside-of-docker in einem Dev Container?
Ja. Binde /var/run/docker.sock in den Container ein, und die docker-CLI darin kommuniziert mit derselben Engine. Oxcarts private Endpunkte werden über diesen Socket abgelehnt. Ein Container kann somit Container verwalten, aber nicht auf Oxcarts eigene Interna zugreifen.
Ersetzt Oxcart /var/run/docker.sock auf meinem Mac?
Nein. Oxcart erstellt oder ersetzt niemals /var/run/docker.sock auf dem Mac. Clients erreichen es über den Docker-Kontext oxcart oder den darin angegebenen Socket-Pfad.
Quellen und Methode
- Kompatibilität: Oxcarts geprüfte Integrationswege (Engine-API-Build für docker-py und Testcontainers, Dev-Containers-CLI 0.89.0, Docker-Socket in Containern) und API-Versionsbereich.
- Docker-Kontextauswahl und Kommandozeileneinrichtung: Oxcart in der ausgelieferten Version.
- Geschwindigkeitswerte: Oxcart 0.1.2, 2026-10-10, Apple M5 Max, 8 CPUs und 12 GiB; die anderen Laufzeitumgebungen wurden früher am selben Tag auf demselben Mac mit demselben Messaufbau und dem docker-Client 29.4 gemessen.