Von docker-compose auf Compose v2 migrieren - was sich geändert hat
Von docker-compose auf Compose v2 migrieren - was sich geändert hat
docker-compose (v1) wurde im Januar 2024 offiziell eingestellt — Zeit für die Migration auf docker compose (v2).
Was ist der Unterschied?
docker-compose v1: Standalone Python-Binary, separat installiert, veraltet seit 2021, Support-Ende Januar 2024.
docker compose v2: Go-Plugin, direkt in die Docker CLI integriert, aktiv entwickelt, kommt mit Docker Desktop und docker-ce.
Der Unterschied im Aufruf: kein Bindestrich mehr.
# Alt (v1):
docker-compose up -d
# Neu (v2):
docker compose up -d
Prüfen was installiert ist
# v1 prüfen
which docker-compose
docker-compose --version
# v2 prüfen
docker compose version
# v2 Ausgabe z. B.:
# Docker Compose version v2.24.0
v1 entfernen
# Debian/Ubuntu
sudo apt remove docker-compose
# Falls manuell installiert
sudo rm /usr/local/bin/docker-compose
v2 installieren (falls nicht vorhanden)
# Mit docker-ce kommt v2 automatisch
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Oder als Plugin nachinstallieren
sudo apt install docker-compose-plugin
Was sich am YAML geändert hat
version: ist deprecated
# Alt — funktioniert noch, wird aber ignoriert und erzeugt eine Warnung:
version: "3.8"
services:
...
# Neu — version: weglassen:
services:
...
v2 ignoriert das version:-Feld komplett. Die Fehlermeldung version is obsolete ist nur eine Warnung, kein Fehler.
Geänderte Flags
# --no-ansi → --ansi never
docker compose --ansi never up -d
# --compatibility → weggefallen (v3-Features sind Standard)
Bessere Defaults
- Parallele Builds sind Standard (kein
--parallelmehr nötig) docker compose pszeigt mehr Informationen- Besseres Logging und Fortschrittsanzeige
Kompatibilität
Die YAML-Syntax ist fast vollständig kompatibel. Wer v3-Compose-Dateien verwendet, kann meistens direkt wechseln:
# Syntax prüfen ohne zu starten
docker compose config
docker compose config gibt die normalisierte Konfiguration aus — Fehler werden sofort angezeigt.
Alias für Übergangszeit
Wer Skripte hat die docker-compose verwenden, kann einen Alias setzen:
# ~/.bashrc oder ~/.zshrc
alias docker-compose='docker compose'
Oder ein Wrapper-Skript:
#!/bin/bash
# /usr/local/bin/docker-compose
exec docker compose "$@"
chmod +x /usr/local/bin/docker-compose
Zusammenfassung
Die Migration ist in den meisten Fällen trivial: docker-compose durch docker compose ersetzen, version: aus der YAML entfernen, fertig. Die YAML-Syntax selbst ist kompatibel. v1 sollte jetzt entfernt werden — es erhält keine Sicherheitsupdates mehr.