Zum Inhalt springen

Konfiguration

Die gesamte Konfiguration befindet sich in der .env-Datei im Projektstammverzeichnis. Diese Datei ist per gitignore ausgeschlossen — sie wird niemals committet.

Der Container unterstützt zwei sich gegenseitig ausschließende Authentifizierungsmodi (in Prioritätsreihenfolge):

  • LiteLLM-Proxy — setzen Sie LITELLM_BASE_URL und LITELLM_API_KEY, um über einen LiteLLM-Proxy zu routen (siehe unten).
  • OAuth-Modus — setzen Sie nur CLAUDE_CODE_OAUTH_TOKEN (siehe unten).

Kombinieren Sie keine Modi — verwenden Sie genau einen.

VariableBeschreibungBeispiel
CLAUDE_CODE_OAUTH_TOKENOAuth-Token aus einem Claude Max-Abonnementsk-ant-oat01-...

Wenn gesetzt, authentifiziert sich Claude Code direkt bei Anthropic über OAuth — kein API-Schlüssel oder Proxy erforderlich. Erhalten Sie Ihr Token in den Claude Code-Einstellungen oder der Anthropic-Konsole.

Wenn Ihr LiteLLM- (oder anderer) Proxy bereits die native Anthropic Messages API spricht — einschließlich web_search, Streaming und Tool-Nutzung — setzen Sie LITELLM_BASE_URL auf die Proxy-Domain. Der Container leitet automatisch die anbieterspezifischen URLs ab:

  • Anthropic-Endpunkt → ${LITELLM_BASE_URL}/anthropic (verwendet von Claude Code)
  • OpenAI-kompatibler Endpunkt → ${LITELLM_BASE_URL}/openai/v1
VariableBeschreibungBeispiel
LITELLM_BASE_URLDomain Ihres LiteLLM-Proxys (ohne Pfad-Suffix)https://litellm.example.com
LITELLM_API_KEYAPI-Schlüssel für die Proxy-Authentifizierungyour-api-key oder Standard litellm-proxy

Benutzer müssen nur die Domain setzen — Anbieter-Pfad-Suffixe werden automatisch hinzugefügt. Zur Laufzeit leitet der Entrypoint ANTHROPIC_API_KEY aus LITELLM_API_KEY ab, sodass Claude Code die Proxy-Anmeldedaten verwenden kann, ohne eine separate benutzerseitige Variable zu erfordern.

Modellnamen werden in diesem Modus nicht umgemappt. Claude Code sendet seine Standard-Modellbezeichner (z. B. claude-sonnet-4-6) und LiteLLM routet sie zu Ihrem konfigurierten Backend.

Standardmäßig validiert Node.js TLS-Zertifikate für alle HTTPS-Verbindungen. Wenn Ihr Upstream-API-Anbieter ein selbstsigniertes Zertifikat verwendet (häufig bei internen Open WebUI- oder LiteLLM-Proxys), können Sie die Validierung deaktivieren, indem Sie Folgendes zu Ihrer .env-Datei hinzufügen:

NODE_TLS_REJECT_UNAUTHORIZED=0

Dies wird für den Produktionsbetrieb nicht empfohlen. Setzen Sie dies nur, wenn Sie dem Netzwerkpfad zwischen dem Container und Ihrem API-Endpunkt vertrauen.

Der Container enthält neben Claude Code mehrere KI-Coding-Agenten:

AgentBefehlAnbieter
CodexcodexOpenAI-kompatibel
PipiMulti-Anbieter (zur Laufzeit konfigurieren)
Oh-My-PiompMulti-Anbieter (zur Laufzeit konfigurieren)

Pi und Oh-My-Pi werden als globale npm-Pakete installiert. Codex ist eine eigenständige Binärdatei, die sich zur Laufzeit selbst aktualisiert.

Der Container betreibt einen virtuellen Display-Stack zum Beobachten und Interagieren mit grafischen Browsern. Siehe Remote-Anzeige (noVNC) für Verbindungsanweisungen und Umgebungsvariablen (ENABLE_VNC, VNC_RESOLUTION, DISPLAY, NOVNC_HOST_PORT).

Der Container enthält einen vorkonfigurierten Chrome DevTools MCP-Server für headless Browser-Automatisierung. Claude Code kann Webseiten navigieren, Screenshots erstellen und das DOM inspizieren, ohne zusätzliche Einrichtung. Siehe Chrome DevTools MCP für Details.

VariableBeschreibungEinstellung
GIT_AUTHOR_NAMEName für Git-Commitsgit config user.name
GIT_AUTHOR_EMAILE-Mail für Git-Commitsgit config user.email

Wenn Git auf Ihrem Host konfiguriert ist, füllen Sie beide Werte automatisch aus:

Terminal-Fenster
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .env
echo "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env
VariableBeschreibungEinstellung
SSH_PRIVATE_KEYBase64-kodierter privater Schlüsselbase64 < ~/.ssh/id_ed25519
VariableBeschreibungEinstellung
GH_TOKENPersönlicher GitHub-Zugriffstoken für gh-CLI und HTTPS-Gitgh auth token (wenn gh lokal installiert ist)

Wenn GH_TOKEN in .env gesetzt ist, authentifiziert sich die gh-CLI automatisch — kein gh auth login erforderlich. Der Entrypoint führt auch gh auth setup-git aus, das den Git-Credential-Helper konfiguriert, sodass HTTPS git clone und git push ohne SSH-Schlüssel funktionieren.

Wenn gh auf Ihrem Host-Rechner installiert und authentifiziert ist, extrahieren Sie das Token direkt:

Terminal-Fenster
echo "GH_TOKEN=$(gh auth token)" >> .env

Andernfalls erstellen Sie einen persönlichen Zugriffstoken und fügen Sie ihn manuell hinzu. Sowohl feingranulare Tokens (empfohlen) als auch klassische Tokens funktionieren. Feingranulare Tokens ermöglichen es Ihnen, den Zugriff auf bestimmte Repositories einzuschränken. Klassische Tokens erfordern den repo-Scope für den Zugriff auf private Repositories.

Um die Authentifizierung innerhalb des Containers zu überprüfen:

Terminal-Fenster
gh auth status

Jede Laufzeitumgebung, CLI und jedes Tool wird direkt im Dockerfile zur Build-Zeit installiert. Das vorgefertigte Image wird bei jedem Push auf main auf ghcr.io/f5-sales-demo/devcontainer:latest veröffentlicht, sodass die meisten Benutzer nie lokal bauen müssen.

Das Ausführen von docker compose up -d zieht das vorgefertigte Image automatisch. Um nach dem Anpassen des Dockerfiles lokal zu bauen, übergeben Sie die Build-Datei explizit:

Terminal-Fenster
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

Siehe Lokale Entwicklung für Details.

Das Dockerfile verwendet einen zweistufigen Build, der für Docker-Layer-Caching optimiert ist. Siehe Lokale Entwicklung — Zweistufige Build-Architektur für die vollständige Schichtaufschlüsselung und Build-Cache-Details.

Der Container enthält eine integrierte Konfiguration, die verhindert, dass Claude Code Tool-Namen verwechselt. Die Tool-Erkennung ist auf zwei Speicherebenen für Defense-in-Depth installiert:

  • Verwaltete Richtlinie (/etc/claude-code/CLAUDE.md) — wird zur Docker-Build-Zeit installiert. Dies ist die Ebene mit der höchsten Priorität in der Speicherhierarchie von Claude Code und wird immer geladen, auch wenn eine große Projekt-CLAUDE.md im Arbeitsverzeichnis existiert.
  • Benutzerspeicher (~/.claude/CLAUDE.md) — wird vom Entrypoint beim ersten Start angelegt. Bietet eine Backup-Schicht und eine sichtbare, anpassbare Kopie für Benutzer.

Claude Code lädt Anweisungen aus mehreren Speicherebenen (höchste bis niedrigste Priorität):

  1. Verwaltete Richtlinie (/etc/claude-code/) — Wird immer geladen, kann nicht ausgeschlossen werden
  2. Projektspeicher (./CLAUDE.md) — Wird pro Projektverzeichnis geladen
  3. Benutzerspeicher (~/.claude/CLAUDE.md) — Wird global für alle Sitzungen geladen
  4. Lokaler Speicher (./CLAUDE.local.md) — Persönliche projektspezifische Überschreibungen

Ohne die verwaltete Richtlinienebene kann die Tool-Erkennung im Benutzerspeicher herabgestuft werden, wenn sie mit einer großen CLAUDE.md auf Projektebene konkurriert, wodurch Claude das Bewusstsein für seine PascalCase-Tool-Namen verliert. Die verwaltete Ebene garantiert, dass die Tool-Erkennung immer mit der höchsten Priorität geladen wird.

Führen Sie den integrierten Selbsttest aus, um die Konfiguration zu überprüfen:

Terminal-Fenster
claude-self-test

Dies prüft, ob alle Konfigurationsdateien vorhanden sind und die erwarteten Tool-Referenzen enthalten.

Um Tools zum Image hinzuzufügen, bearbeiten Sie das Dockerfile und bauen Sie lokal neu. Siehe Lokale Entwicklung — Tools hinzufügen für Anweisungen zum Hinzufügen von APT-Paketen, npm-Tools, pip-Tools und Binär-Downloads.

Erweiterungen werden in .devcontainer/devcontainer.json unter customizations.vscode.extensions konfiguriert und automatisch beim Öffnen in VS Code installiert.

Alle Daten befinden sich in benannten Volumes — es werden keine Host-Verzeichnisse eingebunden:

VolumeEinhängepunktInhalt
workspace/workspaceIhre geklonten Repositories und Projektdateien
home/home/vscodeShell-Verlauf, Tool-Konfigurationen, Caches, SSH-Schlüssel

Beide bleiben über Container-Neustarts und Rebuilds erhalten. Führen Sie docker compose pull aus, um das neueste vorgefertigte Image vor dem Neustart zu laden.

AktionDaten
docker compose downErhalten
docker compose down -vGelöscht
HostContainerDienst
127.0.0.1:${NOVNC_HOST_PORT:-6080}6080noVNC Remote-Anzeige (nur localhost, überschreibbar mit NOVNC_HOST_PORT)

Ports sind an 127.0.0.1 gebunden, sodass sie nur von Ihrem Rechner aus zugänglich sind, nicht aus dem Netzwerk.