AI-spezifisches Docker Image
Für die ai- und ai-agent-Container wird ein separates Docker Image genutzt.
Dabei wird Claude Code im Dockerfile über NPM1 installiert und steht anschließend als CLI im Container zur Verfügung.
Neben der Installation der Claude Code CLI wird zusätzliche Software für die Nutzung der Claude Code Sandbox installiert.
Installation der Claude Code CLI NPM-Dependency
Abschnitt betitelt „Installation der Claude Code CLI NPM-Dependency“Bei der Installation gibt es zwei gängige Ansätze: Installation als root- oder als node-User
Installation als root-User
Abschnitt betitelt „Installation als root-User“Dockerfile
USER rootRUN npm install -g @anthropic-ai/claude-code@2.1.78USER nodeHier erfolgt die Installation als root. Anschließend wird in den node-User gewechselt, sodass Claude Code zur Laufzeit nicht mit Root-Rechten ausgeführt wird.
Der Vorteil dieser Variante: Die installierten Dateien gehören root und sind damit für den node-User nicht veränderbar.
In einem gehärteten Container erhöht dies die Integrität des global installierten Tools.
Installation als node-User
Abschnitt betitelt „Installation als node-User“Dockerfile
RUN mkdir -p /usr/local/share/npm-global \ && chown -R node:node /usr/local/share/npm-globalENV NPM_CONFIG_PREFIX=/usr/local/share/npm-globalENV PATH=$PATH:/usr/local/share/npm-global/binUSER nodeRUN npm install -g @anthropic-ai/claude-code@2.1.78Diese Variante folgt dem Prinzip “Least Privilege auch zur Build-Zeit” und orientiert sich am offiziellen Claude Code Development Container.
Dabei wird ein eigener globaler npm-Pfad eingerichtet, der dem node-User gehört. Die Installation erfolgt anschließend ohne Root-Rechte.
Vorteile:
- Installation erfolgt ohne Root-Rechte
- näher am Dockerfile des offiziellen Claude Code Development Containers
Nachteil:
Der node-User kann den globalen npm-Pfad zur Laufzeit verändern. Damit könnten globale CLI-Binaries durch nachgelagerten Code überschrieben oder manipuliert werden.
Sicherheitsbewertung
Abschnitt betitelt „Sicherheitsbewertung“Der Dockerfile-Build ist eine einmalige, deterministische Aktion mit gepinnter Version der Claude-Code-Dependency.
Der größte Angriffsvektor entsteht typischerweise nicht während der Installation der Claude Code CLI, sondern durch zur Laufzeit ausgeführten Anwendungscode oder NPM-Dependencies innerhalb eines Projekts.
Der offizielle Claude Code Development Container verfolgt ein anderes Ziel: eine interaktive Entwicklungsumgebung, in der Nutzer nach dem Build weitere globale Tools installieren können. In diesem Fall ist der node-User Ansatz gut geeignet.
Sandbox auf Docker Desktop (macOS)
Abschnitt betitelt „Sandbox auf Docker Desktop (macOS)“Claude Code nutzt bubblewrap als zusätzliche2 Sandbox. Diese Sandbox sorgt dafür, dass ein ausgeführter Prozess nur auf bestimmte Dateien zugreifen darf und der Netzwerkzugriff eingeschränkt wird.
Für den Netzwerkzugriff wird innerhalb des Containers zusätzlich socat verwendet. Dabei wird der Netzwerkverkehr des Prozesses in der Sandbox über einen lokalen Proxy geleitet, der anhand der Sandbox-Settings entscheidet, welche Domains erlaubt oder blockiert sind.
Beide Komponenten laufen ausschließlich innerhalb des Containers und haben keine Auswirkungen auf das Host-System.
Dockerfile
...RUN apt-get update \ && apt-get install -y --no-install-recommends \ bubblewrap \ socat \...Einschränkung auf Docker Desktop (macOS)
Abschnitt betitelt „Einschränkung auf Docker Desktop (macOS)“Unter Docker Desktop auf macOS läuft der Container in einer internen Linux-VM. In dieser VM sind bestimmte Funktionen deaktiviert, die Bubblewrap benötigt, um eine eigene Sandbox zu erstellen.
Bubblewrap kann daher nicht vollständig aktiviert werden.
Eine Aktivierung wäre nur möglich, wenn man der Docker-VM zusätzliche privilegierte Rechte gibt. Das würde jedoch dem Hardening-Ansatz dieser Guideline widersprechen.
Abwägung: Bubblewrap vs. Docker-Härtung
Abschnitt betitelt „Abwägung: Bubblewrap vs. Docker-Härtung“Bubblewrap wurde primär für Szenarien entwickelt, in denen Prozesse direkt auf einem Linux-System isoliert werden müssen. In der Umgebung dieser Guideline läuft Claude Code jedoch bereits innerhalb eines gehärteten Docker-Containers.
Eine vollständige Aktivierung von Bubblewrap würde zusätzliche privilegierte Rechte in der Docker-VM erfordern.
Damit würde die äußere Isolationsschicht geschwächt, um eine zusätzliche innere Schicht zu ermöglichen, was das Gesamtsystem eher unsicherer machen würde.
Empfehlung
Abschnitt betitelt „Empfehlung“Im ai- und ai-agent-Container wird enableWeakerNestedSandbox aktiviert. Diese Option nutzt eine abgeschwächte Sandbox innerhalb des Containers und ist speziell für unprivilegierte Docker-Umgebungen vorgesehen.
Sie bietet weniger starke Isolation als Bubblewrap, ergänzt jedoch sinnvoll die bestehende Docker-Härtung, ohne zusätzliche privilegierte Rechte zu erfordern.
Footnotes
Abschnitt betitelt „Footnotes“-
Die Installation über NPM ist als
deprecatedgekennzeichnet, wird jedoch im Dockerfile des offiziellen Development Container ebenfalls genutzt. ↩ -
Siehe offizielles Dev Container Dockerfile von Claude Code ↩