bashrc/dockerps

46 lines
1.6 KiB
Text
Raw Normal View History

dockerps() {
GREEN="\033[0;32m"; RED="\033[0;31m"; YELLOW="\033[0;33m"; NC="\033[0m"
docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}' | \
awk -F'\t' -v green="$GREEN" -v red="$RED" -v yellow="$YELLOW" -v nc="$NC" '
function lastpos(s, ch, i,p){p=0; for(i=1;i<=length(s);i++) if(substr(s,i,1)==ch) p=i; return p}
{
name=$1; img=$2; stat=$3;
# --- Health extrahieren ---
health="unknown"; color=yellow;
if (stat ~ /\(healthy\)/) {health="healthy"; color=green}
else if (stat ~ /\(unhealthy\)/) {health="unhealthy"; color=red}
# --- Image/Version parsen ---
image=img; ver="none";
if (img ~ /@/) {
split(img, a, "@")
image=a[1]; ver=a[2]
if (ver ~ /^sha256:/) { sub(/^sha256:/,"",ver); ver="sha256:" substr(ver,1,12) }
} else {
ls=lastpos(img,"/"); lc=lastpos(img,":")
if (lc>ls && lc>0) { image=substr(img,1,lc-1); ver=substr(img,lc+1) }
}
data[NR,"name"]=name
data[NR,"image"]=image
data[NR,"ver"]=ver
data[NR,"health"]=health
data[NR,"color"]=color
if (length(name)>max_name) max_name=length(name)
if (length(image)>max_image) max_image=length(image)
if (length(ver)>max_ver) max_ver=length(ver)
}
END {
# Header
printf "%-"max_name"s %-"max_image"s %-"max_ver"s %s\n", "NAMES", "IMAGE", "VERSION", "STATUS"
for (i=1; i<=NR; i++) {
printf "%-"max_name"s %-"max_image"s %-"max_ver"s %s%-10s%s\n",
data[i,"name"], data[i,"image"], data[i,"ver"],
data[i,"color"], data[i,"health"], nc
}
}'
}