Agent-almanac setup-docker-compose
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/de/skills/setup-docker-compose" ~/.claude/skills/pjt222-agent-almanac-setup-docker-compose-12cff4 && rm -rf "$T"
i18n/de/skills/setup-docker-compose/SKILL.mdDocker Compose einrichten
Docker Compose fuer R-Entwicklungs- und Deployment-Umgebungen konfigurieren.
Wann verwenden
- Betrieb von R neben anderen Diensten (Datenbanken, APIs)
- Einrichten einer reproduzierbaren Entwicklungsumgebung
- Orchestrieren eines R-basierten MCP-Server-Containers
- Verwalten von Umgebungsvariablen und Volume-Mounts
Eingaben
- Erforderlich: Dockerfile fuer den R-Dienst
- Erforderlich: Projektverzeichnis zum Einhaengen
- Optional: Zusaetzliche Dienste (Datenbank, Cache, Webserver)
- Optional: Konfiguration von Umgebungsvariablen
Vorgehensweise
Schritt 1: docker-compose.yml erstellen
version: '3.8' services: r-dev: build: context: . dockerfile: Dockerfile container_name: r-dev image: r-dev:latest volumes: - .:/workspace - renv-cache:/workspace/renv/cache stdin_open: true tty: true environment: - TERM=xterm-256color - R_LIBS_USER=/workspace/renv/library - RENV_PATHS_CACHE=/workspace/renv/cache command: R restart: unless-stopped volumes: renv-cache: driver: local
Erwartet: Eine
docker-compose.yml-Datei existiert mit definiertem R-Dienst, einschliesslich Volume-Mounts fuer das Projektverzeichnis und den renv-Cache sowie Umgebungsvariablen fuer R-Bibliothekspfade.
Bei Fehler: Bei ungueltigem YAML mit
docker compose config validieren. Sicherstellen, dass die Einrueckung Leerzeichen (keine Tabs) verwendet und alle Zeichenkettenwerte mit Sonderzeichen in Anfuehrungszeichen stehen.
Schritt 2: Zusaetzliche Dienste hinzufuegen (bei Bedarf)
services: r-dev: # ... wie oben depends_on: - postgres environment: - DB_HOST=postgres - DB_PORT=5432 postgres: image: postgres:16 container_name: r-postgres environment: POSTGRES_DB: analysis POSTGRES_USER: ruser POSTGRES_PASSWORD_FILE: /run/secrets/db_password volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" volumes: renv-cache: pgdata:
Erwartet: Der zusaetzliche Dienst (z.B. PostgreSQL) ist mit eigenem Volume, Umgebungsvariablen und Port-Mapping definiert. Der R-Dienst hat
depends_on mit Verweis auf den neuen Dienst.
Bei Fehler: Wenn der Datenbankdienst nicht startet,
docker compose logs postgres auf Initialisierungsfehler pruefen. Sicherstellen, dass Umgebungsvariablen wie POSTGRES_PASSWORD_FILE auf gueltige Secrets verweisen oder fuer die Entwicklung auf POSTGRES_PASSWORD umstellen.
Schritt 3: Netzwerk konfigurieren
Fuer Dienste, die Localhost-Zugriff benoetigen (z.B. MCP-Server):
services: r-dev: network_mode: "host"
Fuer isoliertes Netzwerk:
services: r-dev: networks: - app-network ports: - "3000:3000" networks: app-network: driver: bridge
Erwartet: Netzwerk ist entsprechend konfiguriert:
host-Modus fuer Dienste, die Localhost-Zugriff benoetigen (MCP-Server), oder Bridge-Netzwerk mit expliziten Port-Mappings fuer isolierte Dienste.
Bei Fehler: Wenn Dienste nicht kommunizieren koennen, sicherstellen, dass sie sich im selben Netzwerk befinden. Bei Bridge-Netzwerk Dienstnamen als Hostnamen verwenden (z.B.
postgres statt localhost). Bei Host-Modus localhost verwenden und sicherstellen, dass Ports nicht kollidieren.
Schritt 4: Umgebungsvariablen verwalten
.env-Datei erstellen (git-ignoriert):
R_VERSION=4.5.0 GITHUB_PAT=your_token_here
In Compose referenzieren:
services: r-dev: build: args: R_VERSION: ${R_VERSION} env_file: - .env
Erwartet: Eine
.env-Datei existiert (git-ignoriert) mit projektspezifischen Variablen, und docker-compose.yml referenziert sie ueber env_file oder Variableninterpolation (${VAR}).
Bei Fehler: Wenn Variablen nicht aufgeloest werden, sicherstellen, dass die
.env-Datei im selben Verzeichnis wie docker-compose.yml liegt. docker compose config ausfuehren, um die aufgeloeste Konfiguration mit allen erweiterten Variablen zu sehen.
Schritt 5: Bauen und Starten
# Images bauen docker compose build # Dienste starten docker compose up -d # An R-Sitzung anhaengen docker compose exec r-dev R # Logs anzeigen docker compose logs -f r-dev # Dienste stoppen docker compose down
Erwartet: Alle Dienste starten. R-Sitzung ist erreichbar.
Bei Fehler:
docker compose logs auf Startfehler pruefen. Haeufig: Port-Konflikte, fehlende Umgebungsvariablen.
Schritt 6: Override fuer Entwicklung erstellen
docker-compose.override.yml fuer lokale Entwicklungseinstellungen erstellen:
services: r-dev: volumes: - /path/to/local/packages:/extra-packages environment: - DEBUG=true
Dies wird automatisch mit
docker-compose.yml zusammengefuehrt.
Erwartet: Eine
docker-compose.override.yml-Datei existiert mit entwicklungsspezifischen Einstellungen (zusaetzliche Volumes, Debug-Flags), die automatisch beim Ausfuehren von docker compose up angewendet werden.
Bei Fehler: Wenn Overrides nicht wirksam werden, sicherstellen, dass der Dateiname exakt
docker-compose.override.yml lautet. docker compose config ausfuehren, um die Zusammenfuehrung zu bestaetigen. Fuer explizite Override-Dateien docker compose -f docker-compose.yml -f custom-override.yml up verwenden.
Validierung
-
wird fehlerfrei abgeschlossendocker compose build -
startet alle Dienstedocker compose up - Volume-Mounts teilen Dateien korrekt zwischen Host und Container
- Umgebungsvariablen sind innerhalb der Container verfuegbar
- Dienste koennen miteinander kommunizieren
-
stoppt alles sauberdocker compose down
Haeufige Fehler
- Volume-Mount-Berechtigungen: Linux-Container koennen Dateien als Root erstellen.
-Direktive verwenden oder Berechtigungen korrigieren.user: - Port-Konflikte: Pruefen, ob Dienste bereits dieselben Ports auf dem Host verwenden.
- Docker Desktop vs CLI:
(v2) vsdocker compose
(v1). V2 verwenden.docker-compose - WSL-Pfad-Mounts:
-Pfade verwenden, wenn Windows-Verzeichnisse aus WSL eingehaengt werden./mnt/c/... - Benannte Volumes vs Bind-Mounts: Benannte Volumes bleiben ueber Rebuilds erhalten; Bind-Mounts spiegeln Host-Aenderungen sofort wider.
Verwandte Skills
- Das Dockerfile erstellen, das Compose referenziertcreate-r-dockerfile
- Compose-Konfiguration fuer MCP-Servercontainerize-mcp-server
- Compose-Builds beschleunigenoptimize-docker-build-cache