Inhalt
Reality Check
Stand: Oktober 2026
- Belegt
- 9 Aussagen
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 Serviceweb; ersetze ihn durch deinen eigenen. - Rechte für Docker: entweder
sudovoranstellen oder Mitglied der Gruppedockersein. Bedenke: Die Gruppedockerkommt 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 psDer 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 -dErstellt 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-dmit ein.
Stoppen und aufräumen: down, stop, start #
docker compose downdown 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 startNeu starten: restart #
docker compose restart webStartet 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 lsps 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 -dpull 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-releaseexec 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 lsdocker 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 80Zeigt, 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 --networksCompose 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 -qconfig 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. Mitcdhineinwechseln oder-fangeben.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
restartstattup -dbenutzt. - Container läuft nicht,
pszeigt nichts:docker compose ps -aunddocker compose logs webverraten, warum er beendet wurde.
Sicherheitshinweise #
down -v,docker volume rmunddocker image prune -alöschen endgültig. Prüfe vorher mitdocker 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 einecompose.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
Offizielle Dokumentation · 2026
History and development of Docker Compose (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
docker compose (CLI-Referenz) (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
docker compose up (CLI-Referenz) (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
docker compose down (CLI-Referenz) (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
docker compose restart (CLI-Referenz) (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
Networking in Compose (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
Port publishing and mapping (externer Link, neues Fenster) — Docker
Offizielle Dokumentation · 2026
Docker Compose v5.6.1 (Release, 21.10.2026) (externer Link, neues Fenster) — Docker
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?
Warum übernimmt docker compose restart meine Änderungen nicht?
Wie aktualisiere ich Container mit Docker Compose?
docker-compose oder docker compose – was ist richtig?
Passt dazu
Werkzeug, Übung und eigene Messung zum Thema.
Teil der Themenwelt Docker & Compose im Homelab · Abschnitt „Grundlagen“
Weiterlesen
- DockerEinsteiger
Docker Grundlagen: Container, Images, Volumes und Netzwerke
Docker von Grund auf: Image und Container, Lebenszyklus, Volumes, Ports, Netzwerke und Umgebungsvariablen – mit getesteten Befehlen und einem Compose-Beispiel.
- Netzwerk
Pi-hole mit Docker Compose betreiben
Pi-hole als Container statt als Systeminstallation: eine nachvollziehbare compose.yaml, der Umgang mit belegtem Port 80, ein Speicherlimit für kleine Geräte und die Frage, welchen Upstream-DNS du eintragen solltest.
- Docker
Docker in Proxmox: VM oder LXC-Container?
Docker unter Proxmox läuft in einer VM oder im LXC — aber nur einer der beiden Wege ist offiziell empfohlen. Die Architektur erklärt, beide Wege konkret gezeigt, mit ehrlicher Entscheidungshilfe.