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 --parallel mehr nötig)
  • docker compose ps zeigt 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.