DevToolBoxKOSTENLOS
Blog

Docker Compose YAML-Validierung: 10 häufige Syntaxfehler und ihre Behebung

9 Min. Lesezeitvon DevToolBox
Ad Space

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 expected

Problem: 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: nginx

Editor-Tipp: Aktivieren Sie "Render Whitespace" im Editor.

Fehler 2: Inkonsistente Einrückung

Fehlermeldung:

yaml: line 8: mapping values are not allowed in this context

Problem: 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 key

Problem: 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 object

Problem: 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 allowed

Problem: 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: nginx

Bei 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 array

Problem: 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=production

Fehler 9: Volumen-Pfad-Probleme

Fehlermeldung:

services.web.volumes contains an invalid type

Problem: 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 Windows

Fehler 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:20

Schnell-Checkliste

Vor docker compose up prüfen:

  1. docker compose config zur Syntax-Validierung ausführen
  2. Auf Tabs prüfen: grep -P '\t' docker-compose.yml
  3. Alle Port-Mappings quoten
  4. Keine doppelten Keys auf gleicher Ebene
  5. Werte mit Sonderzeichen quoten
  6. 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.

Verwandte Tools ausprobieren

Y{}JSON ↔ YAML Converter{ }JSON Formatter
Ad Space

Verwandte Artikel

Cron für Serverless: GitHub Actions, Vercel Cron und Cloudflare Workers

Meistern Sie Cron-Ausdrücke auf Serverless-Plattformen. Syntax, Zeitzonenfallen und Beispiele.