Bash-Funktion zum Sortieren der Docker-PS-Ausgabe
Das Sortieren der Ausgabe von docker ps kann hilfreich sein, wenn Sie mehrere Container verwalten und einen klareren Überblick über die Ausführung benötigen. In diesem Tutorial erfahren Sie, wie Sie eine Bash-Funktion erstellen, die diese Ausgabe mithilfe integrierter Shelltools wie awk und sort besser lesbar organisiert. Dies baut auf grundlegenden Docker-Befehlen wie docker ps, docker images und docker inspect auf, um leistungsfähigere Containerverwaltungstools zu erstellen.
- So integrieren Sie es in Ihre Shell-Umgebung
- So testen und verwenden Sie die Funktion in der Praxis
Softwareanforderungen und Linux-Befehlszeilenkonventionen
Bash-Funktionen zum Sortieren der Docker PS-Ausgabe
WUSSTEN SIE SCHON?
Sie können docker ps mit Bash kombinieren, um Ihre Container effektiver zu filtern, zu sortieren und zu überwachen? Sie können z. B. nur die neuesten Container auflisten, diejenigen suchen, die beendet wurden, oder sogar benutzerdefinierte Ansichten nach Name oder Betriebszeit erstellen. Es ist eine großartige Möglichkeit, die Kontrolle zu behalten, wenn Sie viele Container verwalten!
Schritt-für-Schritt-Anleitung
Funktionsweise dieser Funktionen
Diese Bash-Funktionen lösen häufige Herausforderungen bei der Docker-Containerverwaltung:
- docker_ps_sort – Sortiert Ihre ausgeführten Container alphabetisch nach Namen, wobei das Tabellenformat beibehalten wird. Auf diese Weise können Sie bestimmte Container in Umgebungen mit vielen Diensten schnell lokalisieren.
- docker_ps_sort_image – Sortiert Container nach Image-Namen, sodass alle Container mit derselben Image-Version leicht identifiziert werden können. Dies ist besonders nützlich für die Versionskontrolle und die Updateplanung.
Im Folgenden finden Sie die Schritte zum Erstellen, Anwenden und Testen verbesserter Bash-Funktionen zum Sortieren der Docker ps-Ausgabe unter Beibehaltung der korrekten Tabellenformatierung.
Erstellen der Bash-FunktionÖffnen Sie Ihre Shell-Profildatei (z.B.
~/.bashrcoder~/.bash_aliases) und fügen Sie die folgende verbesserte Funktion hinzu:function docker_ps_sort() { docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" | (read -r header && echo "$header" && sort) }Übernehmen Sie die ÄnderungenLaden Sie Ihre Shell-Konfiguration neu, um die neue Funktion anzuwenden:
source ~/.bashrcAusführen der FunktionFühren Sie die Funktion aus, um die sortierte Ausgabe von Docker-Containern mit der richtigen Formatierung anzuzeigen:
docker_ps_sortSie sehen eine Ausgabe wie diese, wobei die Kopfzeile korrekt positioniert ist:
Vorteile dieser Funktion: Die alphabetische Sortierung von Containernamen erleichtert die Vorgehensweise erheblich:
- Schnelles Auffinden eines bestimmten Containers anhand des Namens in Umgebungen mit vielen Containern
- Identifizieren von Containern, die zur gleichen Anwendung oder demselben Dienst gehören (in der Regel mit ähnlichen Präfixen benannt)
- Durchsuchen Sie die Liste effizienter, da sie in einer vorhersehbaren Reihenfolge vorliegt
- Konsistente Ausgabe in Skripten oder Überwachungstools
Passen Sie die Sortierung anWenn Sie nach einem anderen Feld sortieren möchten, z. B. nach Bildname, erstellen Sie eine andere Funktion mit einer geänderten Formatzeichenfolge:
function docker_ps_sort_image() { docker ps --format "table {{.Image}}\t{{.Names}}\t{{.Status}}" | (read -r header && echo "$header" && sort) }Diese Funktion erzeugt eine Ausgabe, die nach Bildnamen sortiert ist:
Warum das nützlich ist: Durch das Sortieren nach Image-Namen können Sie schnell erkennen, in welchen Containern dieselben Images ausgeführt werden. Dies kann von unschätzbarem Wert sein, wenn:
- Planen von Image-Updates oder Sicherheitspatches
- Identifizieren von Containern mit veralteten Image-Versionen
- Gruppieren verwandter Dienste, die dieselben Basisimages verwenden
- Prüfen Ihrer Umgebung auf Image-Standardisierung
Erweiterte AnpassungSie können die Sortierung weiter anpassen, indem Sie zusätzliche Befehle verwenden:
- Sortieren nach einer bestimmten Spalte: Verwenden Sie
sort -k2, um nach der zweiten Spalte zu sortieren
- Sortieren nach einer bestimmten Spalte: Verwenden Sie
- Kehren Sie die Reihenfolge um: Hinzufügen des
Flags -r(sort -r) - Ergebnisse filtern:
Fügen Sie grephinzu, um nur bestimmte Container anzuzeigen Machen Sie es dauerhaftStellen Sie sicher, dass die Funktionen in jeder Sitzung geladen werden, indem Sie sie in Ihrer Shell-Konfigurationsdatei aufbewahren. Sie können eine dedizierte Datei für Docker-Funktionen erstellen:
In ~/.bashrc or ~/.zshrc if [ -f ~/.docker_functions ]; then source ~/.docker_functions fi
Diese Funktion behält die Kopfzeile oben bei, während die Containereinträge darunter sortiert werden, sodass Sie eine ordnungsgemäß formatierte Ausgabe erhalten.
Alternativ können Sie die Funktionsdefinition direkt in Ihrer aktuellen Shell-Sitzung ausführen, um sie sofort zu testen.
function docker_ps_uptime() {
# Sort containers by uptime (newest first)
docker ps --format "table {{.Names}}\t{{.RunningFor}}\t{{.Status}}" |
(read -r header && echo "$header" && sort -k2 -r)
}Funktionsweise dieser Funktion: Die Funktion docker_ps_uptime sortiert Container danach, wie lange sie bereits ausgeführt werden, und zeigt die neuesten Container oben an. Dies ist besonders nützlich bei der Problembehandlung von kürzlich bereitgestellten Containern oder wenn Sie ermitteln müssen, welche Container möglicherweise unerwartet neu gestartet wurden.
Platzieren Sie dann alle Ihre Docker-Funktionen in ~/.docker_functions zur besseren Organisation.
Die Schlüsselkomponenten verstehen
- Das Tabellenformat: Das
--format "Tabelle {{. Namen}}\t{{. Status}}\t{{. Image}}"-Teil erstellt eine formatierte Tabelle mit den angegebenen Spalten. Die Header-Erhaltung: Der (
read -r header && echo "$header" && sort)Teil:- Erstellt eine Unterschale mit Klammern
- Liest die erste Zeile (Header) in eine Variable ein
- Gibt diesen Header zuerst aus
- Sortiert dann die restlichen Zeilen
Verfügbare Formatoptionen: Sie können jeden der folgenden Platzhalter in Ihrer Formatzeichenfolge verwenden:
{{.ID}}– Container-ID
{{. Names}} – Name des Containers{{. Image}} – Name des Bildes{{. Status}} – Status des Containers{{. RunningFor}} – Zeit seit dem Start des Containers{{. Ports}} – Verfügbar gemachte Ports{{. Command}} – Befehl wird ausgeführt{{. Size}} – Größe des BehältersErweiterte docker ps-Befehlssortier-Bash-Funktionen
Sortieren von Containern nach Speicherauslastung: Suchen von Containern, die den meisten Arbeitsspeicher verbrauchen
docker_sort_by_mem() { docker stats --no-stream --format "{{.Name}}\t{{.MemPerc}}\t{{.ID}}" | \ sort -k2 -nr | \ awk 'BEGIN {print "CONTAINER NAME\tMEMORY USAGE\tCONTAINER ID"} {print $0}' }Container nach Betriebszeit auflisten (älteste zuerst): Zeigen Sie Container sortiert nach ihrer Dauer an.
docker_sort_by_age() { docker ps --format "{{.CreatedAt}}\t{{.Names}}\t{{.RunningFor}}\t{{.Status}}" | \ sort -k1 | \ awk -F'\t' '{print $2 "\t" $3 "\t" $4}' | \ column -t -s $'\t' }Diese Funktion listet Container nach Betriebszeit auf, wobei die ältesten Container zuerst angezeigt werden. Die Ausgabe wird zur besseren Lesbarkeit in Spalten formatiert. Dies ist hilfreich, um Container mit langer Ausführungszeit zu identifizieren, die möglicherweise im Rahmen von Wartungsverfahren aktualisiert oder rotiert werden müssen.
Container nach Image gruppieren: Ermitteln Sie, welche Images die meisten Container ausführen
docker_group_by_image() { docker ps --format "{{.Image}}" | \ sort | \ uniq -c | \ sort -nr | \ awk '{printf("%s containers using image %s\n", $1, $2)}' }Suchen von Containern mit Portkonflikten: Identifizieren von Containern, die möglicherweise überlappende Portzuordnungen aufweisen
docker_find_port_conflicts() { docker ps --format "{{.Names}}\t{{.Ports}}" | \ grep -v "0.0.0.0" | \ awk -F'->' '{print $1}' | \ awk '{print $1 "\t" $NF}' | \ sort -k2 | \ awk '{ port=$2; if(port==prev) { print "CONFLICT: " prev_name " and " $1 " both use " port; } prev=port; prev_name=$1; }' }Container mit hohen CPU-Spitzen überwachen: Verfolgen Sie Container, die einen definierten CPU-Schwellenwert überschreiten
docker_monitor_cpu_spikes() { threshold=${1:-50} # Default threshold of 50% watch -n 5 "docker stats --no-stream --format \"{{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\" | \ awk -v threshold=\"$threshold\" '\ BEGIN {printf \"%-30s %-15s %-15s %-10s\\n\", \"CONTAINER\", \"CPU %\", \"MEM %\", \"STATUS\"}\ { cpu=\$2; sub(/%/, \"\", cpu); if (cpu > threshold) { printf \"%-30s %-15s %-15s %-10s\\n\", \$1, \$2, \$3, \"WARNING\"; } else { printf \"%-30s %-15s %-15s %-10s\\n\", \$1, \$2, \$3, \"OK\"; } }'" }Analysieren von Containernetzwerken: Sortieren von Containern nach Netzwerkdatenverkehrsvolumen
docker_sort_by_network() { docker stats --no-stream --format "{{.Name}}\t{{.NetIO}}" | \ awk '{ split($2, io, "/"); # Extract numeric values and convert to bytes gsub(/[^0-9.]/, "", io[1]); if($2 ~ /kB/) io[1] *= 1024; if($2 ~ /MB/) io[1] *= 1024 * 1024; if($2 ~ /GB/) io[1] *= 1024 * 1024 * 1024; # Print with the calculated byte values for sorting printf "%s\t%s\t%.0f\n", $1, $2, io[1]; }' | \ sort -k3 -nr | \ head -10 | \ awk '{printf("%-30s %s\n", $1, $2)}' }Dashboard für den Integritätsstatus: Erstellen Sie eine farbige Übersicht über den Integritätsstatus von Containern
docker_health_dashboard() { docker ps --format "{{.Names}}\t{{.Status}}" | \ awk '{ container_name = $1; # Remove the first field and preserve the rest as status $1 = ""; status = $0; printf "%s\t", container_name; if (status ~ /\(unhealthy\)/) { printf "\033[31mUNHEALTHY\033[0m\n"; } else if (status ~ /\(healthy\)/) { printf "\033[32mHEALTHY\033[0m\n"; } else if (status ~ /Up/ && status !~ /health/) { printf "\033[33mUP (NO HEALTH CHECK)\033[0m\n"; } else if (status ~ /Restarting/) { printf "\033[35mRESTARTING\033[0m\n"; } else { printf "\033[31mCRITICAL\033[0m\n"; } }' | \ column -t -s $'\t' }Mit dieser Funktion wird ein farbenfrohes Integritätsdashboard erstellt, das den Status aller Container mit intuitiver Farbcodierung anzeigt: Grün für fehlerfrei, rot für fehlerhaft, gelb für die Ausführung ohne Zustandsprüfungen und violett für den Neustart von Containern. Dies bietet einen schnellen visuellen Überblick über den Zustand Ihrer Containerflotte und macht es einfach, Probleme auf einen Blick zu erkennen.
Diese Funktion ruft Statistiken zur Speicherauslastung aus allen ausgeführten Containern ab und sortiert sie in absteigender Reihenfolge. Die Ausgabe zeigt Containernamen, prozentuale Speicherauslastung und Container-IDs an, sodass Sie speicherintensive Container schnell identifizieren können. Dies ist besonders nützlich für die Ressourcenoptimierung in Produktionsumgebungen.
Diese Funktion gruppiert und zählt laufende Container nach ihrem Basisimage, wobei die Ergebnisse in absteigender Reihenfolge angezeigt werden. Auf diese Weise erhalten Sie einen schnellen Überblick darüber, welche Images in Ihrer Umgebung am häufigsten bereitgestellt werden, was für Sicherheitsüberwachungen oder die Planung von Updates nützlich ist.
Diese komplexe Funktion analysiert Port-Zuordnungen über alle Container hinweg, um potenzielle Konflikte zu identifizieren, bei denen mehrere Container möglicherweise versuchen, denselben Host-Port zu verwenden. Es analysiert die Ausgabe, extrahiert Portinformationen und kennzeichnet Container mit übereinstimmenden Portzuweisungen, um unerwartetes Verhalten in vernetzten Anwendungen zu verhindern.
Diese Überwachungsfunktion sucht kontinuierlich nach Containern, die einen angegebenen CPU-Auslastungsschwellenwert überschreiten (standardmäßig 50 %, wenn nicht angegeben). Es wird alle 5 Sekunden aktualisiert und hebt Container mit hoher CPU-Auslastung hervor, sodass Leistungsprobleme während des Debuggens oder von Lasttestszenarien in Echtzeit leicht identifiziert werden können.
Diese ausgeklügelte Funktion analysiert die Netzwerk-I/O für alle Container, rechnet die verschiedenen Einheiten (kB, MB, GB) in eine gemeinsame Skala um, sortiert nach dem höchsten Netzwerkverkehr und zeigt die 10 Container mit dem höchsten Bandbreitenverbrauch an. Dies ist von unschätzbarem Wert für die Identifizierung von Containern, bei denen möglicherweise Netzwerkengpässe oder ungewöhnliche Datenverkehrsmuster auftreten.
Schlussfolgerung
Diese Bash-Funktion verbessert Ihren Workflow bei der Verwaltung mehrerer Docker-Container. Es ist besonders nützlich in stark ausgelasteten Systemen und hilft Ihnen, wichtige Container basierend auf der von Ihnen definierten Sortierlogik schnell zu identifizieren.
Häufig gestellte Fragen (FAQ)
Kann ich nach CPU- oder Speicherauslastung sortieren?
Nicht direkt mit
docker ps, aber Sie könnendocker statsmit benutzerdefinierten Skripten oder Tools wiectopverwenden.Funktioniert das auf Zsh oder Fish?
Je nach Shell müssen Sie die Syntax möglicherweise leicht anpassen, aber das Konzept bleibt dasselbe.
Kann ich das für Remote-Docker-Hosts verwenden?
Ja, wenn Ihr Docker-Client so eingestellt ist, dass er mit einem Remote-Host kommuniziert, funktioniert die Funktion genauso.
Was ist, wenn ich bestimmte Container filtern möchte?
Sie können vor der
Sortierungeinengrep-Befehlhinzufügen, um Containernamen oder -status nach Ihren Anforderungen zu filtern.Wie kann ich die Funktionalität weiter verbessern?
Erwägen Sie die Integration von Fehlerbehandlung und zusätzlichen Sortieroptionen basierend auf Ihren typischen Nutzungsszenarien.




