Files
Snippets/docker-cheatsheet.md
T
2026-08-15 17:18:22 +02:00

8.5 KiB
Raw Blame History

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) oder docker-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

  1. Läuft der Container überhaupt? → docker ps -a (Status Exited / Restarting?)
  2. Warum crasht er? → docker logs --tail 100 <name>
  3. Stimmen Mounts / Env / Netzwerk? → docker inspect <name>
  4. Hängt er am Netzwerk? → docker network inspect <netzwerk> + Ping-Test (Abschnitt 7.4)
  5. Ist der Port offen? → docker port <name> + ss -tulpn auf dem Host
  6. Platz voll? → docker system df → ggf. docker system prune

Erstellt als schnelle Referenz – bei Docker Compose v1 überall docker compose durch docker-compose ersetzen.