8.5 KiB
Docker & Docker Compose – Befehls‑Referenz
Eine praktische Übersicht der wichtigsten Befehle für den Alltag – von Container‑Verwaltung über Docker Compose bis zur Netzwerk‑Untersuchung.
Hinweis: Je nach Installation heißt der Compose‑Befehl
docker compose(Plugin, neu) oderdocker-compose(Standalone, alt). Beide Varianten sind unten aufgeführt, wo es relevant ist.
1. Container – Grundlagen
| Zweck | Befehl |
|---|---|
| Laufende Container anzeigen | docker ps |
| Alle Container (auch gestoppte) | docker ps -a |
| Container starten | docker start <name|id> |
| Container stoppen | docker stop <name|id> |
| Container neu starten | docker restart <name|id> |
| Container pausieren / fortsetzen | docker pause <name> / docker unpause <name> |
| Container löschen | docker rm <name|id> |
| Laufenden Container zwangsweise löschen | docker rm -f <name|id> |
| Alle gestoppten Container aufräumen | docker container prune |
In einen Container hineingehen
# Interaktive Shell öffnen (bash oder sh, je nach Image)
docker exec -it <name> bash
docker exec -it <name> sh
# Einzelnen Befehl im Container ausführen
docker exec <name> ls -la /data
# Als bestimmter User (z. B. root)
docker exec -it -u root <name> sh
2. Logs & Diagnose
# Logs anzeigen
docker logs <name>
# Logs live mitverfolgen (folgen)
docker logs -f <name>
# Nur die letzten 100 Zeilen, mit Zeitstempel
docker logs --tail 100 -t <name>
# Logs seit einem Zeitpunkt
docker logs --since 10m <name>
# Ressourcen-Verbrauch live (CPU, RAM, Netzwerk, I/O)
docker stats
# Prozesse innerhalb eines Containers
docker top <name>
# Vollständige Metadaten (JSON): Mounts, Netzwerk, Env, ...
docker inspect <name>
# Gezielt einen Wert herausfiltern (z. B. IP-Adresse)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <name>
# Geänderte Dateien im Container-Dateisystem
docker diff <name>
3. Images
| Zweck | Befehl |
|---|---|
| Lokale Images anzeigen | docker images |
| Image herunterladen | docker pull <image>:<tag> |
| Image löschen | docker rmi <image> |
| Ungenutzte Images aufräumen | docker image prune |
| Image aus Dockerfile bauen | docker build -t <name>:<tag> . |
| Image-Historie / Layer ansehen | docker history <image> |
4. Volumes & Daten
# Volumes auflisten
docker volume ls
# Volume-Details (z. B. Mountpoint auf dem Host)
docker volume inspect <volume>
# Ungenutzte Volumes aufräumen (VORSICHT: Daten weg!)
docker volume prune
# Datei vom Host in den Container kopieren
docker cp ./datei.txt <name>:/pfad/im/container/
# Datei aus dem Container auf den Host holen
docker cp <name>:/pfad/im/container/datei.txt ./
5. Aufräumen (Speicher freigeben)
# Alles Ungenutzte entfernen (gestoppte Container, dangling Images, Netzwerke)
docker system prune
# Zusätzlich ungenutzte Images UND Volumes (aggressiv!)
docker system prune -a --volumes
# Speicherverbrauch von Docker anzeigen
docker system df
6. Docker Compose – Grundlagen
Alle Befehle im Verzeichnis mit der docker-compose.yml ausführen.
| Zweck | Befehl |
|---|---|
| Stack starten (im Hintergrund) | docker compose up -d |
| Stack starten + Images neu bauen | docker compose up -d --build |
| Stack stoppen & Container entfernen | docker compose down |
| Stack stoppen (Container bleiben) | docker compose stop |
| Gestoppten Stack wieder starten | docker compose start |
| Einen einzelnen Dienst neu starten | docker compose restart <service> |
| Status aller Dienste | docker compose ps |
| Logs aller Dienste (live) | docker compose logs -f |
| Logs eines Dienstes | docker compose logs -f <service> |
| In einen Dienst hineingehen | docker compose exec <service> sh |
| Images der Dienste aktualisieren | docker compose pull |
| Config einlesen & validieren | docker compose config |
Down mit Aufräumen
# Stack runterfahren UND die zugehörigen Volumes löschen (VORSICHT!)
docker compose down -v
# Zusätzlich auch die gebauten/verwendeten Images entfernen
docker compose down --rmi all
Update-Workflow (typisch)
docker compose pull # neue Images holen
docker compose up -d # Container mit neuen Images neu erstellen
docker image prune -f # alte, ungenutzte Images aufräumen
7. Netzwerk – Untersuchung & Verwaltung
Der zentrale Teil, wenn Container sich nicht erreichen oder Ports nicht durchkommen.
7.1 Netzwerke auflisten & inspizieren
# Alle Docker-Netzwerke anzeigen
docker network ls
# Details eines Netzwerks: welche Container hängen dran, Subnetz, Gateway
docker network inspect <netzwerk>
# Kompakt: nur die Container-Namen + IPs eines Netzwerks
docker network inspect <netzwerk> \
-f '{{range .Containers}}{{.Name}} → {{.IPv4Address}}{{println}}{{end}}'
Die Standard-Netzwerktypen:
- bridge – Standard für einzelne Container auf einem Host.
- host – Container teilt sich den Netzwerk-Stack des Hosts (kein Port-Mapping nötig).
- none – kein Netzwerk.
- benutzerdefinierte bridge – von Compose automatisch pro Projekt angelegt; hier funktioniert DNS-Auflösung über Service-Namen.
7.2 Netzwerke anlegen / verbinden
# Netzwerk erstellen
docker network create <netzwerk>
# Container mit einem Netzwerk verbinden
docker network connect <netzwerk> <container>
# Container von einem Netzwerk trennen
docker network disconnect <netzwerk> <container>
# Ungenutzte Netzwerke aufräumen
docker network prune
7.3 Ports & Erreichbarkeit prüfen
# Welche Ports mappt ein Container?
docker port <name>
# Port-Mappings in der Übersicht (Spalte PORTS)
docker ps
# Auf dem Host: lauscht der Port wirklich?
ss -tulpn | grep <port> # modern
netstat -tulpn | grep <port> # klassisch
7.4 Verbindung zwischen Containern testen
Wichtig: In einem benutzerdefinierten Compose-Netzwerk erreichen sich Container über ihren Service-Namen als Hostname (z. B. db, gitea, redis).
# DNS-Auflösung + Erreichbarkeit vom Container A zum Service "db"
docker compose exec app ping -c 3 db
# Falls ping fehlt: mit wget/curl gegen den Ziel-Port testen
docker compose exec app wget -qO- http://db:5432 || echo "nicht erreichbar"
docker compose exec app curl -v http://gitea:3000
# DNS-Auflösung explizit prüfen (nslookup / getent)
docker compose exec app nslookup db
docker compose exec app getent hosts db
Wenn Diagnose-Tools im Container fehlen, hilft ein Wegwerf-Container im selben Netzwerk:
docker run --rm -it --network <netzwerk> nicolaka/netshoot
# darin dann: ping, curl, dig, nslookup, traceroute, tcpdump, nmap ...
nicolaka/netshoot ist das Standard-Toolbox-Image für Container-Netzwerk-Debugging.
7.5 Häufige Netzwerk-Probleme
| Symptom | Prüfen |
|---|---|
| Container erreicht anderen nicht über Namen | Hängen beide im selben Netzwerk? → docker network inspect |
| Port von außen nicht erreichbar | Port-Mapping gesetzt (-p host:container / ports: in Compose)? Firewall? |
| „Connection refused" | Dienst lauscht evtl. nur auf 127.0.0.1 statt 0.0.0.0 im Container |
| DNS-Name wird nicht aufgelöst | Standard-bridge hat kein DNS – benutzerdefiniertes Netzwerk / Compose nutzen |
| Zwei Stacks sollen sich sehen | Gemeinsames externes Netzwerk anlegen und beiden zuweisen |
8. Nützliche Kombi-Befehle
# Alle laufenden Container stoppen
docker stop $(docker ps -q)
# Alle Container löschen (gestoppt)
docker rm $(docker ps -aq)
# In den zuletzt gestarteten Container springen
docker exec -it $(docker ps -q -n 1) sh
# Nur Namen + Status + Ports, sauber formatiert
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
# Live-Logs eines Compose-Dienstes ab jetzt (ohne Historie)
docker compose logs -f --tail 0 <service>
9. Schnelle Fehlersuche – Reihenfolge
- Läuft der Container überhaupt? →
docker ps -a(StatusExited/Restarting?) - Warum crasht er? →
docker logs --tail 100 <name> - Stimmen Mounts / Env / Netzwerk? →
docker inspect <name> - Hängt er am Netzwerk? →
docker network inspect <netzwerk>+ Ping-Test (Abschnitt 7.4) - Ist der Port offen? →
docker port <name>+ss -tulpnauf dem Host - Platz voll? →
docker system df→ ggf.docker system prune
Erstellt als schnelle Referenz – bei Docker Compose v1 überall docker compose durch docker-compose ersetzen.