DevToolBoxFREE
BlogAdvertise

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

9 Min. Lesezeitvon DevToolBox

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.

War das hilfreich?

Stay Updated

Get weekly dev tips and new tool announcements.

No spam. Unsubscribe anytime.

Partner Picks

Sponsor this article

Place your product next to this developer topic with tracked clicks.

Ask about article sponsorship

This site uses cookies for analytics and to display ads. By continuing to browse, you agree. Privacy Policy