Zum Inhalt springen
LabKompass – zur Startseite
DockerEinsteiger7 Min. Lesezeit

Docker-Compose-Befehle: Die wichtigsten Kommandos verständlich erklärt

Die wichtigsten docker compose-Befehle als Nachschlagewerk: up, down, restart, logs, ps, pull, exec sowie Volumes, Ports und Netzwerke, jeweils mit Erklärung und typischen Fallen.

Niclas HennrichVeröffentlicht
Inhalt16 Abschnitte

Reality Check

Stand: Oktober 2026

Belegt
9 Aussagen

9 Quellen · Was die Stufen bedeuten

Kurz gesagt: Für den Alltag reichen sieben Befehle: docker compose up -d startet oder aktualisiert alles, down räumt Container und Netzwerk weg, ps zeigt den Zustand, logs -f die laufenden Meldungen, pull holt neue Images, exec öffnet eine Shell im Container, und restart startet neu – übernimmt aber keine Änderungen an der compose.yaml. Gefährlich ist vor allem down -v, weil es Volumes mit deinen Daten löscht.

Grundlage dieser Anleitung ist die offizielle Dokumentation von Docker, insbesondere die Compose-CLI-Referenz (Stand Oktober 2026, Docker Compose 5.6).

Docker Compose beschreibt mehrere Container, ihre Ports, Datenordner und Netzwerke in einer Datei namens compose.yaml. Ein solches Setup heißt Projekt, jeder Container darin ist ein Service. Was Container, Images und Volumes überhaupt sind, erklärt der Guide Docker Grundlagen. Dieser Beitrag ist das Nachschlagewerk für die Befehle danach.

Was du brauchst #

  • Docker Engine mit dem Compose-Plugin. Aktuell ist Docker Compose 5.6.1 (Oktober 2026).Belegt Deine Version zeigt docker compose version.
  • Ein Projektverzeichnis mit einer compose.yaml, zum Beispiel /opt/stack. Die Beispiele unten nennen den Service web; ersetze ihn durch deinen eigenen.
  • Rechte für Docker: entweder sudo voranstellen oder Mitglied der Gruppe docker sein. Bedenke: Die Gruppe docker kommt Root-Rechten gleich.

Die Grundregeln vorab #

Leerzeichen statt Bindestrich. Das alte, in Python geschriebene docker-compose (Compose v1) ist abgelöst; unterstützt sind heute Compose v2 und v5, die du als docker compose aufrufst.Belegt Ältere Anleitungen mit Bindestrich funktionieren meist, wenn du ihn durch ein Leerzeichen ersetzt.

Im Projektordner arbeiten. Ohne weitere Angabe sucht Compose im aktuellen Verzeichnis und dessen übergeordneten Verzeichnissen nach einer compose.yaml oder docker-compose.yaml.Belegt Wechsle also erst mit cd /opt/stack in den Ordner. Alternativ gibst du die Datei mit -f an:

docker compose -f /opt/stack/compose.yaml ps

Der Projektname stammt standardmäßig vom Verzeichnisnamen, sofern die Datei nicht selbst einen name: festlegt. Mit -p setzt du ihn selbst, etwa um dieselbe Datei zweimal zu betreiben.

Service-Namen sind optional. Fast jeder Befehl wirkt auf alle Services des Projekts; hängst du einen Namen an (docker compose logs web), nur auf diesen.

Starten: docker compose up -d #

docker compose up -d

Erstellt alle Container, Netzwerke und Volumes aus der compose.yaml und startet sie. -d (detached) lässt sie im Hintergrund laufen, dein Terminal ist sofort wieder frei. Ohne -d siehst du die Logs aller Container, und Strg+C stoppt alles wieder.

Hat sich seit dem letzten Start die Konfiguration oder das Image eines Service geändert, stoppt up den betroffenen Container und erstellt ihn neu; eingebundene Volumes bleiben erhalten.Belegt Deshalb ist up -d auch der Befehl, mit dem du Änderungen an der compose.yaml anwendest.

Nützliche Zusätze:

  • --force-recreate – erstellt alle Container neu, auch ohne Änderung.
  • --remove-orphans – entfernt Container von Services, die du aus der Datei gelöscht hast.
  • --wait – wartet, bis die Services laufen bzw. als gesund gemeldet werden; schließt -d mit ein.

Stoppen und aufräumen: down, stop, start #

docker compose down

down stoppt und entfernt die Container des Projekts sowie die in der Datei definierten Netzwerke und das Standardnetzwerk. Als external markierte Netzwerke und Volumes werden nie entfernt.Belegt Deine Daten in benannten Volumes und eingebundenen Ordnern bleiben also liegen.

Vorsicht bei down -v: Mit -v löscht Compose zusätzlich die benannten Volumes aus dem Abschnitt volumes der Datei und anonyme Volumes – inklusive aller Daten darin. Das ist nicht rückgängig zu machen. Verwende -v nur, wenn du ein Projekt wirklich komplett entsorgen willst.

Willst du Container nur anhalten, ohne sie zu entfernen:

docker compose stop
docker compose start

Neu starten: restart #

docker compose restart web

Startet die Container neu, etwa wenn eine Anwendung hängt. Änderungen an der compose.yaml werden dabei nicht übernommen – auch nicht geänderte Umgebungsvariablen.Belegt Das ist die häufigste Verwechslung: Nach einer Änderung an der Datei brauchst du docker compose up -d, nicht restart.

Zustand prüfen: ps und ls #

docker compose ps
docker compose ps -a
docker compose ls

ps listet die Container des Projekts mit Status und veröffentlichten Ports. Standardmäßig nur laufende; -a zeigt auch gestoppte – praktisch, wenn ein Container direkt nach dem Start wieder beendet ist. ls zeigt alle laufenden Compose-Projekte auf dem Host, egal in welchem Verzeichnis.

Logs lesen: logs -f #

docker compose logs -f web
docker compose logs --tail 100 web
docker compose logs --since 30m

-f (follow) zeigt neue Meldungen fortlaufend an, bis du Strg+C drückst – die Container laufen dabei weiter. --tail 100 zeigt nur die letzten 100 Zeilen pro Container, --since 30m nur die letzten 30 Minuten, -t setzt Zeitstempel davor. Startet ein Container nicht, ist logs ohne -f der erste Blick.

Updaten: pull und up -d #

docker compose pull
docker compose up -d

pull lädt die Images neu, startet aber noch nichts. Das anschließende up -d erstellt genau die Container neu, deren Image sich geändert hat. Steht in der Datei ein fester Tag wie nginx:1.30, bleibst du bei dieser Version; ein Versionswechsel ist dann eine bewusste Änderung an der Datei. Vor großen Versionssprüngen gehören ein Backup der Volumes und ein Blick in die Release Notes dazu.

Alte, nicht mehr genutzte Images räumst du anschließend mit docker image prune auf.

In den Container: exec #

docker compose exec web sh
docker compose exec web cat /etc/os-release

exec führt einen Befehl in einem laufenden Container aus. Mit sh (oder bash, falls im Image vorhanden) bekommst du eine Shell; exit bringt dich zurück. Anders als bei docker exec musst du -it nicht angeben, Compose öffnet standardmäßig ein interaktives Terminal. In Skripten schaltest du das mit -T ab. Mit -u wählst du den Benutzer im Container.

Denk daran: Änderungen, die du per exec im Container machst, sind beim nächsten Neuerstellen weg – außer sie liegen in einem Volume.

Volumes anzeigen #

docker compose volumes
docker volume ls

docker compose volumes listet die Volumes des Projekts. Benannte Volumes heißen auf dem Host meist <projektname>_<volumename>. Eingebundene Ordner (Bind Mounts wie ./daten:/data) erscheinen hier nicht, weil sie keine Docker-Volumes sind – sie liegen einfach im Dateisystem.

Ports prüfen #

docker compose port web 80

Zeigt, unter welchem Host-Port der Container-Port 80 von web erreichbar ist. Ein Eintrag wie "8080:80" in der Datei bedeutet: Host-Port 8080 wird an Container-Port 80 weitergeleitet.

Ohne Angabe einer Host-Adresse veröffentlicht Docker Ports auf allen Netzwerkschnittstellen des Hosts.Belegt Soll ein Dienst nur auf dem Server selbst erreichbar sein, etwa hinter einem Reverse Proxy, schreibst du "127.0.0.1:8080:80". Nutzt du die Firewall ufw (etwa unter Ubuntu), kommt hinzu: Datenverkehr zu veröffentlichten Container-Ports wird umgeleitet, bevor die Regeln von ufw greifen.Belegt

Netzwerke verstehen #

docker network ls
docker compose config --networks

Compose legt für jedes Projekt automatisch ein Netzwerk namens <projektname>_default an; darin erreichen sich die Services gegenseitig über ihren Service-Namen.Belegt Eine Datenbank im Service db sprichst du aus einem anderen Container also als db:5432 an – ohne veröffentlichten Port und ohne IP-Adresse, die sich bei jedem Neuerstellen ändern kann. docker network ls zeigt die Netzwerke auf dem Host, config --networks die Netzwerknamen, die dein Projekt definiert.

Konfiguration prüfen: config #

docker compose config
docker compose config -q

config zeigt die Datei so, wie Compose sie tatsächlich anwendet – mit eingesetzten Variablen aus der .env-Datei. Mit -q prüft es nur die Syntax und meldet Fehler. Vorsicht beim Teilen der Ausgabe: Stehen Passwörter in Variablen, tauchen sie dort im Klartext auf.

Typische Fehler und Lösungen #

Die Fehlermeldungen unten sind Beispiele; der genaue Wortlaut kann je nach Version abweichen.

  • no configuration file provided: not found: Du bist nicht im Projektordner. Mit cd hineinwechseln oder -f angeben.
  • port is already allocated: Ein anderer Dienst belegt den Host-Port. Wähle in der Datei einen freien Host-Port (linke Zahl) oder beende den anderen Dienst.
  • Änderung wirkt nicht: Du hast restart statt up -d benutzt.
  • Container läuft nicht, ps zeigt nichts: docker compose ps -a und docker compose logs web verraten, warum er beendet wurde.

Sicherheitshinweise #

  • down -v, docker volume rm und docker image prune -a löschen endgültig. Prüfe vorher mit docker compose volumes, was betroffen ist.
  • Veröffentliche Ports nur, wenn andere Geräte sie wirklich brauchen, und gib Verwaltungsoberflächen nie per Router ins Internet frei.
  • Passwörter gehören in eine .env-Datei mit eingeschränkten Rechten, nicht direkt in eine compose.yaml, die du vielleicht versionierst oder teilst.

Was heißt das für dich? #

Merk dir vor allem drei Dinge: up -d ist der Befehl für Start und Änderungen, restart übernimmt nichts Neues, und -v bei down löscht Daten. Alles andere schlägst du hier nach, wenn du es brauchst. Eine neue compose.yaml mit Ports, Volumes und Healthcheck musst du nicht von Hand schreiben – der Docker Compose Generator erzeugt sie dir mit Erklärung jeder Option.

Quellen

  1. Offizielle Dokumentation · 2026

    History and development of Docker Compose (externer Link, neues Fenster) — Docker

  2. Offizielle Dokumentation · 2026

    docker compose (CLI-Referenz) (externer Link, neues Fenster) — Docker

  3. Offizielle Dokumentation · 2026

    docker compose up (CLI-Referenz) (externer Link, neues Fenster) — Docker

  4. Offizielle Dokumentation · 2026

    docker compose down (CLI-Referenz) (externer Link, neues Fenster) — Docker

  5. Offizielle Dokumentation · 2026

    docker compose restart (CLI-Referenz) (externer Link, neues Fenster) — Docker

  6. Offizielle Dokumentation · 2026

    Networking in Compose (externer Link, neues Fenster) — Docker

  7. Offizielle Dokumentation · 2026

    Port publishing and mapping (externer Link, neues Fenster) — Docker

  8. Offizielle Dokumentation · 2026

    Docker Compose v5.6.1 (Release, 21.10.2026) (externer Link, neues Fenster) — Docker

  9. Offizielle Dokumentation · 2026

    Packet filtering and firewalls (Docker and ufw) (externer Link, neues Fenster) — Docker

Häufige Fragen

Was ist der Unterschied zwischen docker compose down und stop?

stop hält die Container nur an; mit docker compose start laufen sie unverändert weiter. down stoppt die Container und entfernt sie samt dem Projektnetzwerk. Benannte Volumes bleiben bei down erhalten, solange du nicht -v anhängst. Daten in Volumes oder eingebundenen Ordnern gehen also auch bei down nicht verloren.

Warum übernimmt docker compose restart meine Änderungen nicht?

Weil restart nur die bestehenden Container neu startet. Änderungen an der compose.yaml, etwa neue Umgebungsvariablen oder Ports, werden laut Docker-Doku dabei nicht übernommen. Dafür brauchst du docker compose up -d: Compose erkennt die geänderte Konfiguration und erstellt die betroffenen Container neu.

Wie aktualisiere ich Container mit Docker Compose?

Mit docker compose pull lädst du die neuen Images, mit docker compose up -d erstellt Compose alle Container neu, deren Image sich geändert hat. Eingebundene Volumes bleiben dabei erhalten. Vorher lohnt ein Backup und ein Blick in die Release Notes der Anwendung.

docker-compose oder docker compose – was ist richtig?

docker compose mit Leerzeichen. Das alte, in Python geschriebene docker-compose (Compose v1) ist Geschichte. Unterstützt sind laut Docker-Doku heute Compose v2 und v5, aufgerufen als docker compose. Eine version-Angabe am Anfang der compose.yaml ignorieren sie.

Passt dazu

Werkzeug, Übung und eigene Messung zum Thema.

Teil der Themenwelt Docker & Compose im Homelab · Abschnitt „Grundlagen“

Weiterlesen