Docker- und Podman-Befehlsgenerator
Alltägliche docker- und podman-Befehle: Shell, Logs, exec, run, build, compose.
Über dieses Tool
Wähle, was du tun willst, etwa eine Shell in einem Container öffnen, seine Logs verfolgen, einen Befehl ausführen, Dateien kopieren, ihn untersuchen, Images bauen oder aufräumen oder Docker Compose steuern, und erhalte den exakten docker- oder podman-Befehl mit Erklärung zu jedem Flag. Der run-Generator macht aus einem Container außerdem eine Compose-Datei, und eingefügte run-Befehle lassen sich importieren und bearbeiten.
So verwendest du es
- Wähle Docker oder Podman; die Befehle sind bis auf den Programmnamen gleich.
- Wähle links eine Aufgabe, etwa Shell öffnen, Logs ansehen oder Speicherplatz freigeben.
- Gib den Containernamen und die Optionen ein. Der eingegebene Name wird in die anderen Aufgaben übernommen.
- Kopiere den Befehl und lies, was jeder Teil bewirkt. Bei „Neuen Container starten“ bekommst du auch eine Compose-Datei.
Fragen
- Wie bekomme ich eine Shell in einem laufenden Container?
- Führe docker exec -it CONTAINER sh aus. Nimm bash statt sh, wenn das Image es enthält; Slim- und Alpine-Images haben meist nur sh. Tippe exit, um die Shell zu verlassen, ohne den Container zu stoppen.
- Wie verfolge ich die Logs eines Containers?
- docker logs -f --tail 100 CONTAINER zeigt die letzten 100 Zeilen und streamt dann weiter. Füge --since 10m hinzu, um nur aktuelle Zeilen zu sehen, und leite durch grep -i --line-buffered error, um beim Eintreffen zu filtern.
- Wie mache ich aus einem docker-run-Befehl docker compose?
- Füge den Befehl in das Importfeld ein und stelle das Ergebnis auf Compose-Datei um. Ports, Volumes, Umgebungsvariablen, Neustart-Richtlinie, Netzwerk und Ressourcenlimits werden übernommen.
- Was bedeutet -p 8080:80?
- Die linke Zahl ist der Port auf deinem Rechner, die rechte der Port im Container. Stell 127.0.0.1: voran, damit der Port nur von deinem eigenen Computer aus erreichbar ist.
- Was ist der Unterschied zwischen einem benannten Volume und einem Bind-Mount?
- Ein Bind-Mount wie ./data:/data bindet einen Ordner deines Rechners ein. Ein benanntes Volume wie pgdata:/var/lib/postgresql/data ist von Docker verwalteter Speicher, der den Container überdauert und die übliche Wahl für Datenbanken ist.
- Sind Docker- und Podman-Befehle gleich?
- Fast: podman run akzeptiert dieselben Flags. Die Hauptunterschiede sind die Rootless-Voreinstellungen, sodass Host-Ports unter 1024 zusätzliche Einrichtung brauchen, und auf SELinux-Systemen brauchen Bind-Mounts oft :Z.
- Sollte ich Passwörter in -e-Flags angeben?
- Sie landen in deinem Shell-Verlauf und in docker inspect. Für alles über lokale Tests hinaus nutze eine --env-file, die nicht in der Versionsverwaltung liegt, oder die Secrets-Funktion deiner Plattform.
- Wie finde ich die IP-Adresse eines Containers?
- Wähle „Container untersuchen“ und dann „IP-Adresse“: Das Tool schreibt das Template für docker inspect --format für dich. Die IP brauchst du allerdings selten. Container im selben benutzerdefinierten Netzwerk oder Compose-Projekt erreichen sich über den Namen, etwa db:5432, und die IP kann sich bei jedem Neuerstellen eines Containers ändern.
- Kann ich Dateien aus einem gestoppten Container kopieren?
- Ja. docker cp CONTAINER:/var/log/app.log ./ funktioniert, egal ob der Container läuft oder gestoppt ist – praktisch, um nach einem Fehler Logs oder Crash-Dumps zu sichern. Es kopiert auch ganze Ordner. Mit „Dateien hinein- oder herauskopieren“ bekommst du den Befehl für beide Richtungen.
- Was ist der Unterschied zwischen docker stop und docker kill?
- docker stop sendet SIGTERM, wartet 10 Sekunden (änderbar mit -t) und sendet dann SIGKILL. docker kill sendet sofort SIGKILL, ohne Gelegenheit zum Aufräumen. Dauert stop immer die vollen 10 Sekunden, ignoriert dein Programm wahrscheinlich SIGTERM – oft, weil eine Shell als Prozess 1 läuft und das Signal nicht weitergibt.
docker exec vs. docker run
docker run erstellt einen neuen Container aus einem Image und startet ihn. docker exec führt einen Befehl in einem Container aus, der bereits läuft. Ein häufiger Fehler ist docker run -it nginx bash, um „in einen Server reinzukommen“: Das startet einen frischen Container neben dem echten, und alles, was du darin änderst, verschwindet. Ohne --rm hinterlässt außerdem jeder Versuch einen gestoppten Container, den docker ps -a anzeigt.
docker exec funktioniert nur, solange der Container läuft, und hilft daher nicht bei einem Container, der beim Start abstürzt. Lies zuerst docker logs --tail 50 CONTAINER. Starte das Image dann mit einer Shell statt seines normalen Programms: docker run -it --rm --entrypoint sh IMAGE. Der run-Builder hat dafür unter „Weitere Optionen“ die Felder „Entrypoint“ und „Befehl“.
Von Docker belegten Speicherplatz freigeben
Beginne mit docker system df, das zeigt, wie viel Platz Images, Container, lokale Volumes und der Build-Cache belegen. docker image prune entfernt nur Dangling Images, die ungetaggten Überbleibsel von Rebuilds. docker image prune -a entfernt jedes Image, das kein Container nutzt, du lädst sie beim nächsten Mal also erneut herunter. docker container prune löscht gestoppte Container und gibt dabei auch ihre beschreibbaren Layer frei.
Vorsicht bei Volumes: Sie enthalten Datenbankdateien und Uploads. docker volume prune löscht Volumes, die kein Container nutzt, und entfernt ab Docker 23 nur anonyme Volumes, sofern du nicht -a angibst. docker system prune -a --volumes räumt fast alles Ungenutzte auf einmal ab. Prune-Befehle fragen nach einer Bestätigung, sofern du nicht -f angibst, und nichts landet in einem Papierkorb, lies die Abfrage also, bevor du bestätigst.
Docker-Restart-Policys: unless-stopped vs. always
Mit --restart always startet Docker den Container neu, sobald er sich beendet, und auch beim Start des Docker-Daemons – selbst wenn du den Container vorher von Hand gestoppt hast. unless-stopped verhält sich genauso, nur bleibt ein Container, den du selbst gestoppt hast, nach einem Neustart gestoppt. on-failure startet nur nach einem Exit-Code ungleich null neu. Der Standard, no, startet nie neu. Für dauerhaft laufende Dienste ist unless-stopped meist die richtige Wahl.
In einer Compose-Datei lautet dieselbe Einstellung restart: unless-stopped. Der Wert „no“ muss in Anführungszeichen stehen, weil ältere YAML-Parser ein nacktes no als false lesen; die Compose-Ausgabe hier setzt die Anführungszeichen für dich. Podman ist anders: Es hat keinen ständig laufenden Daemon, deshalb kommen Container mit Restart-Policy nach einem Neustart nur zurück, wenn der Dienst podman-restart aktiviert ist oder du sie unter systemd laufen lässt.
Funktioniert etwas nicht, oder sieht ein Ergebnis falsch aus? Ein Problem mit diesem Tool melden