Docker Compose YAML-Dateien wirken einfach — bis sie brechen. Ein falsches Leerzeichen, falsche Einrückung oder ein unquotierter Sonderzeichen führt zu kryptischen Fehlern. Hier die 10 häufigsten Fehler und wie man sie behebt.
YAML mit unserem JSON-YAML-Konverter validieren →
Fehler 1: Tabs statt Leerzeichen
Fehlermeldung:
yaml: line 5: found a tab character where an indentation space is expectedProblem: YAML verbietet Tabs für Einrückung strikt.
Lösung: Ersetzen Sie alle Tabs durch Leerzeichen (2 pro Ebene).
# BAD (tabs - invisible but breaks YAML)
services:
web:
image: nginx
# GOOD (2 spaces)
services:
web:
image: nginxEditor-Tipp: Aktivieren Sie "Render Whitespace" im Editor.
Fehler 2: Inkonsistente Einrückung
Fehlermeldung:
yaml: line 8: mapping values are not allowed in this contextProblem: Gemischt: 2 Leerzeichen hier, 4 dort.
# BAD (inconsistent: 2 spaces then 4 spaces)
services:
web:
image: nginx # 4 spaces - inconsistent!
ports:
- "80:80"
# GOOD (consistent 2 spaces)
services:
web:
image: nginx # 2 spaces - consistent
ports:
- "80:80"Fehler 3: Unquotierte Sonderzeichen
Fehlermeldung:
yaml: line 6: did not find expected keyProblem: YAML interpretiert Doppelpunkte, Hashes und Klammern speziell. Quoten Sie sie.
# BAD
services:
web:
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb # colon in value!
- APP_TITLE=My App: The Best # colon in value!
# GOOD (quote values with special characters)
services:
web:
environment:
- "DATABASE_URL=postgres://user:pass@db:5432/mydb"
- "APP_TITLE=My App: The Best"Zu quotende Zeichen: : { } [ ] , & * # ? | - < > = ! % @
Fehler 4: Falsches Port-Mapping-Format
Fehlermeldung:
services.web.ports contains an invalid type, it should be a number, or an objectProblem: YAML kann 80:80 ohne Anführungszeichen als Base-60 interpretieren.
# RISKY (YAML may interpret as base-60)
services:
web:
ports:
- 80:80 # Works but risky
- 5432:5432 # May cause issues
# SAFE (always quote port mappings)
services:
web:
ports:
- "80:80"
- "5432:5432"
- "127.0.0.1:3000:3000"Fehler 5: Fehlender oder falscher Version-Key
Fehlermeldung:
(root) Additional property version is not allowedProblem: Docker Compose v2 benötigt den version-Key nicht mehr.
# OUTDATED (Docker Compose v1 format)
version: "3.8"
services:
web:
image: nginx
# CURRENT (Docker Compose v2 - no version needed)
services:
web:
image: nginxBei docker compose (v2): version entfernen. Bei docker-compose (v1): behalten.
Fehler 6: Umgebungsvariablen Mapping vs Liste
Fehlermeldung:
services.web.environment must be a mapping or an arrayProblem: Vermischung von Mapping- und Listen-Syntax.
# Format A: List (with dashes)
services:
web:
environment:
- NODE_ENV=production
- PORT=3000
# Format B: Mapping (key: value)
services:
web:
environment:
NODE_ENV: production
PORT: 3000
# BAD: Mixing both formats
services:
web:
environment:
NODE_ENV: production
- PORT=3000 # ERROR: mixing formats!Fehler 7: Boolesche Werte nicht quotiert
Fehlermeldung: Kein Fehler, aber unerwartetes Verhalten.
Problem: YAML interpretiert yes, no, true, false, on, off als Boolesche Werte.
# BAD (YAML converts to boolean true/false)
services:
web:
environment:
FEATURE_FLAG: yes # becomes boolean true, not string "yes"
DEBUG: on # becomes boolean true
COUNTRY: NO # becomes boolean false (Norway code!)
# GOOD (quote string values)
services:
web:
environment:
FEATURE_FLAG: "yes"
DEBUG: "on"
COUNTRY: "NO"Fehler 8: Doppelte Keys
Fehlermeldung: Oft kein Fehler — der zweite Wert überschreibt still den ersten.
# BAD (duplicate 'ports' key - second one silently wins)
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NODE_ENV=production
ports: # DUPLICATE! This replaces the first ports
- "443:443"
# GOOD (combine under single key)
services:
web:
image: nginx
ports:
- "80:80"
- "443:443"
environment:
- NODE_ENV=productionFehler 9: Volumen-Pfad-Probleme
Fehlermeldung:
services.web.volumes contains an invalid typeProblem: Windows-Pfade mit Backslashes benötigen Quotierung.
# BAD (Windows paths without quotes)
services:
web:
volumes:
- C:\Users\me\app:/app # Backslashes cause issues
# GOOD (use forward slashes or quotes)
services:
web:
volumes:
- "./app:/app"
- "/home/user/data:/data"
- "C:/Users/me/app:/app" # Forward slashes on WindowsFehler 10: YAML-Anker falsch verwendet
Fehlermeldung:
yaml: unknown anchor 'common'Problem: Anker (*name) vor Definition (&name) referenziert.
# BAD (reference before definition)
services:
web:
<<: *common # ERROR: 'common' not defined yet
x-common: &common
restart: always
# GOOD (define anchor first, then reference)
x-common: &common
restart: always
logging:
driver: json-file
services:
web:
<<: *common
image: nginx
api:
<<: *common
image: node:20Schnell-Checkliste
Vor docker compose up prüfen:
- docker compose config zur Syntax-Validierung ausführen
- Auf Tabs prüfen:
grep -P '\t' docker-compose.yml - Alle Port-Mappings quoten
- Keine doppelten Keys auf gleicher Ebene
- Werte mit Sonderzeichen quoten
- Konsistente Einrückung (2 Leerzeichen)
YAML mit unserem JSON-YAML-Konverter validieren →
JSON-Ausgabe von "docker compose config" formatieren →
Häufige Fragen
Wie validiere ich eine Docker Compose-Datei vor dem Start?
Führen Sie "docker compose config" aus, um die Konfiguration zu validieren und anzuzeigen.
Warum "service must be a mapping"?
Die services-Sektion ist nicht korrekt als YAML-Mapping strukturiert. Häufig: fehlende Einrückung oder falsche Syntax.
Tabs oder Leerzeichen in Docker Compose YAML?
Immer Leerzeichen. YAML erlaubt keine Tabs für Einrückung. Editor auf 2 Leerzeichen pro Tab einstellen.