Files
dockernet-inspector/dockernet-inspector.v1.sh
2026-02-17 12:23:43 +01:00

130 lines
4.5 KiB
Bash

#!/usr/bin/env bash
# Script Name: dockernet-inspector.v1.sh
# Beschreibung: Dockernet Inspector - Verwaltet und inspiziert Docker-Netzwerke
# - Alle Netzwerke auflisten
# - Details zu einem spezifischen Docker-Netzwerk anzeigen
# (Netzwerktyp, Bridge-Interface, Subnet/Gateway, Interface-Status & Stats)
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
# Befehle:
# networks - Alle Docker Netzwerke auflisten
# inspect - Details zu einem Netzwerk anzeigen (Standard)
# help, -h, --help - Diese Hilfe anzeigen
# Autor: Patrick Asmus
# Web: https://www.cleveradmin.de
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
# Version: 1.1.0
# Datum: 17.02.2026
# Modifikation: Funktion zum Auflisten aller Docker Netzwerke hinzugefügt
#####################################################
set -euo pipefail
# Hilfe-Funktion
show_help() {
cat <<HELP
Dockernet Inspector v1.1.0 - Docker Netzwerk Verwaltungstool
VERWENDUNG:
$0 networks - Alle Docker Netzwerke auflisten
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
$0 <netzwerk> - Alias für 'inspect <netzwerk>'
$0 help - Diese Hilfe anzeigen
BEFEHLE:
networks Listet alle verfügbaren Docker Netzwerke auf
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
- Netzwerktyp (Driver)
- Bridge-Interface
- Subnetz und Gateway
- Interface-Status
- Netzwerk-Statistiken (RX/TX bytes und packets)
help Zeigt diese Hilfe an
BEISPIELE:
$0 networks
$0 inspect mynetwork
$0 mynetwork
$0 -h
HELP
}
# Funktion zum Auflisten aller Docker Netzwerke
list_networks() {
echo "Verfügbare Docker Netzwerke:"
echo "=============================="
docker network ls --format "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}" || {
echo "Fehler: Docker Netzwerke konnten nicht abgerufen werden."
exit 2
}
}
# Argument-Verarbeitung
COMMAND="${1:-}"
case "$COMMAND" in
networks)
list_networks
exit 0
;;
help | -h | --help)
show_help
exit 0
;;
inspect)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
;;
"")
echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|help"
exit 1
;;
*)
# Kompatibilität: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname
NET="$COMMAND"
;;
esac
# Hauptlogik für die Inspektion eines Netzwerks (rest des originalen Scripts)
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; }
# 1) Netzwerk-ID und Bridge-Name separat holen (jeweils eigenes inspect)
ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; }
BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)"
# 2) Falls kein eigener Bridge-Name: Standardname br-<ID[:12]>
if [[ -z "$BR_RAW" || "$BR_RAW" == "<no value>" ]]; then
IF="br-${ID:0:12}"
else
IF="$BR_RAW"
fi
# 3) Subnet/Gateway
SUBNET="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Subnet}}' 2>/dev/null || true)"
GATEWAY="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Gateway}}' 2>/dev/null || true)"
# 4) Interface-Status & Stats
state="unknown"; rxb=0; txb=0; rxp=0; txp=0
if ip link show "$IF" &>/dev/null; then
state="$(cat /sys/class/net/"$IF"/operstate 2>/dev/null || echo unknown)"
rxb="$(cat /sys/class/net/"$IF"/statistics/rx_bytes 2>/dev/null || echo 0)"
txb="$(cat /sys/class/net/"$IF"/statistics/tx_bytes 2>/dev/null || echo 0)"
rxp="$(cat /sys/class/net/"$IF"/statistics/rx_packets 2>/dev/null || echo 0)"
txp="$(cat /sys/class/net/"$IF"/statistics/tx_packets 2>/dev/null || echo 0)"
else
echo "WARN: Interface $IF existiert (noch) nicht auf dem Host."
fi
cat <<OUT
Docker-Netzwerk : $NET
Driver : $(docker network inspect "$NET" --format '{{.Driver}}')
Bridge-Interface : $IF
Subnet/Gateway : ${SUBNET:--} / ${GATEWAY:--}
OperState : $state
RX bytes/packets : $rxb / $rxp
TX bytes/packets : $txb / $txp
OUT