YAML ist das Standard-Konfigurationsformat für Docker, Kubernetes und CI/CD-Pipelines. Trotz der menschenfreundlichen Syntax ist es überraschend fehleranfällig.
Wo YAML verwendet wird
- Docker Compose
- Kubernetes Manifeste
- GitHub Actions / GitLab CI
- Ansible Playbooks
- Konfigurationsdateien
Grundlegende Syntaxregeln
Einrückung
YAML verwendet Leerzeichen (keine Tabs):
# ✅ Correct (2-space indentation)
server:
host: localhost
port: 8080
database:
name: myapp
pool: 10
# ❌ Wrong (tab characters or inconsistent spaces)
server:
host: localhost # Tab character - INVALID!
port: 8080 # 3 spaces - inconsistent!Schlüssel-Wert-Paare
Durch Doppelpunkt und Leerzeichen getrennt:
# ✅ Correct
name: John Doe
port: 8080
# ❌ Wrong - missing space after colon
name:John DoeMehrzeilige Strings
YAML bietet zwei Block-Skalar-Stile:
# | (literal block) - preserves newlines
description: |
This is line one.
This is line two.
Each newline is preserved.
# > (folded block) - folds newlines to spaces
description: >
This is a long paragraph
that will be joined into
a single line.Datentypen
| Typ | Syntax | Beispiel |
|---|---|---|
| String | plain, "quoted", 'quoted' | name: John |
| Integer | 42, 0xFF, 0o77 | port: 8080 |
| Float | 3.14, .inf, .nan | pi: 3.14159 |
| Boolean | true/false | debug: true |
| Null | null, ~, (empty) | value: null |
| Date | YYYY-MM-DD | date: 2026-02-10 |
Das "Norwegen-Problem"
In YAML 1.1 wird `NO` als boolean `false` interpretiert:
# ❌ YAML 1.1 interprets these as booleans!
country: NO # → false
answer: yes # → true
switch: on # → true
# ✅ Fix: quote the values
country: "NO" # → string "NO"
answer: "yes" # → string "yes"
switch: "on" # → string "on"Sammlungen
# List (sequence)
fruits:
- apple
- banana
- cherry
# Nested map
database:
host: localhost
port: 5432
credentials:
user: admin
password: secret
# Inline / Flow style
fruits: [apple, banana, cherry]
point: {x: 10, y: 20}Top 10 YAML-Fehler
| # | Fehler | Ursache | Lösung |
|---|---|---|---|
| 1 | Tab-Zeichen | Tabs für Einrückung | Durch Leerzeichen ersetzen |
| 2 | Inkonsistente Einrückung | 2 und 4 Leerzeichen gemischt | Einheitlich einrücken |
| 3 | Fehlendes Leerzeichen | `key:value` | Leerzeichen nach `:` einfügen |
| 4 | Ungequotete Sonderzeichen | Werte mit : oder # ohne Anführungszeichen | In Anführungszeichen setzen |
| 5 | Boolean-Konvertierung | yes/no als Boolean | Anführungszeichen verwenden |
| 6 | Strings mit Doppelpunkt | URLs brechen | Gesamten Wert quoten |
| 7 | Doppelte Schlüssel | Gleicher Schlüssel zweimal | Duplikate entfernen |
| 8 | Nachfolgende Leerzeichen | Unsichtbare Leerzeichen | Editor konfigurieren |
| 9 | Listen-Einrückungsfehler | Items nicht ausgerichtet | `-` ausrichten |
| 10 | Fehlender Dokumenttrenner | Mehrere Dokumente ohne `---` | `---` hinzufügen |
YAML vs JSON vs TOML
| Funktion | YAML | JSON | TOML |
|---|---|---|---|
| Comments | # support | None | # support |
| Multi-line strings | | and > | \\n only | """ triple quotes |
| Data types | Rich (dates, etc.) | Basic (6 types) | Rich (dates, etc.) |
| Readability | High | Medium | High |
| Machine parsing | Complex | Simple | Medium |
| Best for | Config files | APIs, data exchange | App config |
Best Practices
- YAML-Linter in CI/CD verwenden
- Leerzeichen im Editor anzeigen
- 2 Leerzeichen verwenden
- Mehrdeutige Strings quoten
- Schema-Validierung nutzen
- Dateien klein und modular halten
FAQ
Kann man Tabs in YAML verwenden?
Nein. YAML verbietet strikt Tab-Zeichen für die Einrückung.
Unterschied zwischen einfachen und doppelten Anführungszeichen?
Einfache: literale Strings. Doppelte: Escape-Sequenzen erlaubt.
Wie stellt man null dar?
`null`, `~`, oder leerer Wert.
Warum behandelt YAML "NO" als false?
YAML 1.1 behandelt yes/no als Boolean. YAML 1.2 erkennt nur true/false.