Sammelloeschung fuer ungenutzte Docker-Netzwerke hinzugefuegt
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
||||
# - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||
# - Netzwerke interaktiv auswaehlen und loeschen
|
||||
# - Alle ungenutzten, loeschbaren Netzwerke auf einmal entfernen
|
||||
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
||||
# Befehle:
|
||||
# networks - Alle Docker Netzwerke auflisten
|
||||
@@ -15,14 +16,14 @@
|
||||
# ips-all - Belegte IPs in allen Netzwerken
|
||||
# unused-networks - Netzwerke ohne verbundene Container
|
||||
# delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||
# delete-unused-networks - Alle ungenutzten, loeschbaren Netzwerke loeschen
|
||||
# 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.6.0
|
||||
# Datum: 10.04.2026
|
||||
# Modifikation: Schutz fuer Docker-Standardnetzwerke (bridge, host, none) hinzugefuegt;
|
||||
# Detailansicht zeigt Hinweis statt Bridge-Daten, Loeschen wird blockiert
|
||||
# Version: 1.7.0
|
||||
# Datum: 08.05.2026
|
||||
# Modifikation: Sammelloeschung fuer ungenutzte Docker-Netzwerke hinzugefuegt
|
||||
#####################################################
|
||||
|
||||
set -uo pipefail
|
||||
@@ -41,10 +42,15 @@ print_table_title() {
|
||||
print_rule "="
|
||||
}
|
||||
|
||||
is_protected_network() {
|
||||
local net="$1"
|
||||
[[ "$net" == "bridge" || "$net" == "host" || "$net" == "none" || "$net" == "ingress" || "$net" == "docker_gwbridge" ]]
|
||||
}
|
||||
|
||||
# Hilfe-Funktion
|
||||
show_help() {
|
||||
cat <<HELP
|
||||
Dockernet Inspector v1.6.0 - Docker Netzwerk Verwaltungstool
|
||||
Dockernet Inspector v1.7.0 - Docker Netzwerk Verwaltungstool
|
||||
|
||||
VERWENDUNG:
|
||||
$0 - Interaktiver Modus (Menü)
|
||||
@@ -54,6 +60,7 @@ VERWENDUNG:
|
||||
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
|
||||
$0 unused-networks - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||
$0 delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||
$0 delete-unused-networks - Alle ungenutzten, loeschbaren Netzwerke loeschen
|
||||
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
|
||||
$0 help - Diese Hilfe anzeigen
|
||||
|
||||
@@ -63,7 +70,9 @@ BEFEHLE:
|
||||
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
|
||||
unused-networks Zeigt alle Docker Netzwerke ohne verbundene Container
|
||||
delete-networks Netzwerk per Nummer auswaehlen und loeschen;
|
||||
Docker-Standardnetzwerke (bridge, host, none) sind geschuetzt
|
||||
Docker-Standard- und Systemnetzwerke sind geschuetzt
|
||||
delete-unused-networks Loescht alle ungenutzten Docker Netzwerke nach Bestaetigung;
|
||||
bridge, host, none, ingress und docker_gwbridge sind geschuetzt
|
||||
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
|
||||
- Netzwerktyp (Driver)
|
||||
- Bridge-Interface
|
||||
@@ -78,6 +87,7 @@ BEISPIELE:
|
||||
$0 ips-all
|
||||
$0 unused-networks
|
||||
$0 delete-networks
|
||||
$0 delete-unused-networks
|
||||
$0 inspect mynetwork
|
||||
$0 mynetwork
|
||||
$0 -h
|
||||
@@ -219,7 +229,7 @@ delete_networks() {
|
||||
local i
|
||||
for ((i=0; i<${#net_array[@]}; i++)); do
|
||||
local suffix=""
|
||||
[[ "${net_array[$i]}" == "bridge" || "${net_array[$i]}" == "host" || "${net_array[$i]}" == "none" ]] && suffix=" (Standard - nicht loeschbar)"
|
||||
is_protected_network "${net_array[$i]}" && suffix=" (geschuetzt - nicht loeschbar)"
|
||||
printf " %d. %s%s\n" "$((i+1))" "${net_array[$i]}" "$suffix"
|
||||
done
|
||||
echo ""
|
||||
@@ -236,8 +246,8 @@ delete_networks() {
|
||||
fi
|
||||
|
||||
local selected_net="${net_array[$((choice-1))]}"
|
||||
if [[ "$selected_net" == "bridge" || "$selected_net" == "host" || "$selected_net" == "none" ]]; then
|
||||
echo "FEHLER: '$selected_net' ist ein Docker-Standardnetzwerk und kann nicht geloescht werden."
|
||||
if is_protected_network "$selected_net"; then
|
||||
echo "FEHLER: '$selected_net' ist ein geschuetztes Docker-Netzwerk und kann nicht geloescht werden."
|
||||
return 1
|
||||
fi
|
||||
echo ""
|
||||
@@ -250,11 +260,92 @@ delete_networks() {
|
||||
echo ""
|
||||
if docker network rm "$selected_net" 2>/dev/null; then
|
||||
echo "OK: Netzwerk '$selected_net' erfolgreich geloescht."
|
||||
return 0
|
||||
else
|
||||
echo "FEHLER: Netzwerk '$selected_net' konnte nicht geloescht werden (wird moeglicherweise noch genutzt)."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
delete_unused_networks() {
|
||||
local nets net containers driver scope
|
||||
local -a delete_candidates
|
||||
local -a protected_unused
|
||||
|
||||
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
|
||||
if [[ -z "$nets" ]]; then
|
||||
echo "Fehler: Keine Docker Netzwerke gefunden."
|
||||
return 1
|
||||
fi
|
||||
|
||||
delete_candidates=()
|
||||
protected_unused=()
|
||||
|
||||
while read -r net; do
|
||||
[[ -z "${net:-}" ]] && continue
|
||||
containers="$(docker network inspect "$net" --format '{{len .Containers}}' 2>/dev/null || true)"
|
||||
if [[ "${containers:-0}" -eq 0 ]]; then
|
||||
if is_protected_network "$net"; then
|
||||
protected_unused+=("$net")
|
||||
else
|
||||
delete_candidates+=("$net")
|
||||
fi
|
||||
fi
|
||||
done < <(printf "%s\n" "$nets")
|
||||
|
||||
if ((${#delete_candidates[@]} == 0)); then
|
||||
echo "Keine ungenutzten, loeschbaren Docker Netzwerke gefunden."
|
||||
if ((${#protected_unused[@]} > 0)); then
|
||||
echo "Geschuetzte ungenutzte Netzwerke werden uebersprungen: ${protected_unused[*]}"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
||||
print_table_title "Ungenutzte Docker Netzwerke, die geloescht werden koennen:"
|
||||
local table_data
|
||||
table_data=$'NAME\tDRIVER\tSCOPE\n'
|
||||
for net in "${delete_candidates[@]}"; do
|
||||
driver="$(docker network inspect "$net" --format '{{.Driver}}' 2>/dev/null || true)"
|
||||
scope="$(docker network inspect "$net" --format '{{.Scope}}' 2>/dev/null || true)"
|
||||
table_data+="${net}"$'\t'"${driver}"$'\t'"${scope}"$'\n'
|
||||
done
|
||||
print_dynamic_table "$table_data"
|
||||
|
||||
if ((${#protected_unused[@]} > 0)); then
|
||||
echo ""
|
||||
echo "Geschuetzte ungenutzte Netzwerke werden nicht geloescht: ${protected_unused[*]}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
read -rp "Alle oben aufgefuehrten ungenutzten Netzwerke wirklich loeschen? [j/N]: " confirm
|
||||
if [[ "$confirm" != "j" && "$confirm" != "J" ]]; then
|
||||
echo "Abgebrochen."
|
||||
return 0
|
||||
fi
|
||||
|
||||
local success_count=0
|
||||
local fail_count=0
|
||||
echo ""
|
||||
for net in "${delete_candidates[@]}"; do
|
||||
if is_protected_network "$net"; then
|
||||
echo "SKIP: Netzwerk '$net' ist geschuetzt."
|
||||
continue
|
||||
fi
|
||||
|
||||
if docker network rm "$net" >/dev/null 2>&1; then
|
||||
echo "OK: Netzwerk '$net' erfolgreich geloescht."
|
||||
((success_count++))
|
||||
else
|
||||
echo "FEHLER: Netzwerk '$net' konnte nicht geloescht werden (wird moeglicherweise wieder genutzt)."
|
||||
((fail_count++))
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Ergebnis: $success_count geloescht, $fail_count fehlgeschlagen."
|
||||
((fail_count == 0))
|
||||
}
|
||||
|
||||
# Interaktive Menü-Funktion
|
||||
interactive_menu() {
|
||||
while true; do
|
||||
@@ -269,9 +360,10 @@ interactive_menu() {
|
||||
echo "4. Alle belegten IPs anzeigen"
|
||||
echo "5. Ungenutzte Netzwerke anzeigen"
|
||||
echo "6. Netzwerke loeschen"
|
||||
echo "7. Alle ungenutzten Netzwerke loeschen"
|
||||
echo "0. Beenden"
|
||||
echo ""
|
||||
read -rp "Bitte waehlen Sie eine Option (0-6): " choice
|
||||
read -rp "Bitte waehlen Sie eine Option (0-7): " choice
|
||||
echo ""
|
||||
|
||||
case "$choice" in
|
||||
@@ -309,12 +401,15 @@ interactive_menu() {
|
||||
6)
|
||||
delete_networks
|
||||
;;
|
||||
7)
|
||||
delete_unused_networks
|
||||
;;
|
||||
0)
|
||||
echo "Auf Wiedersehen!"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 6 ein."
|
||||
echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 7 ein."
|
||||
sleep 1
|
||||
;;
|
||||
esac
|
||||
@@ -428,7 +523,11 @@ case "$COMMAND" in
|
||||
;;
|
||||
delete-networks)
|
||||
delete_networks
|
||||
exit 0
|
||||
exit $?
|
||||
;;
|
||||
delete-unused-networks)
|
||||
delete_unused_networks
|
||||
exit $?
|
||||
;;
|
||||
help | -h | --help)
|
||||
show_help
|
||||
|
||||
@@ -57,9 +57,11 @@ Dockerdet Inspector - Interaktives Menü
|
||||
3. IPs eines Netzwerks anzeigen
|
||||
4. Alle belegten IPs anzeigen
|
||||
5. Ungenutzte Netzwerke anzeigen
|
||||
6. Netzwerke loeschen
|
||||
7. Alle ungenutzten Netzwerke loeschen
|
||||
0. Beenden
|
||||
|
||||
Bitte waehlen Sie eine Option (0-5):
|
||||
Bitte waehlen Sie eine Option (0-7):
|
||||
```
|
||||
|
||||
## `unused-networks`
|
||||
@@ -72,3 +74,23 @@ NAME DRIVER SCOPE
|
||||
old-backend bridge local
|
||||
test-network bridge local
|
||||
```
|
||||
|
||||
## `delete-unused-networks`
|
||||
|
||||
```text
|
||||
Ungenutzte Docker Netzwerke, die geloescht werden koennen:
|
||||
================================================================================
|
||||
NAME DRIVER SCOPE
|
||||
--------------------------------------------------------------------------------
|
||||
old-backend bridge local
|
||||
test-network bridge local
|
||||
|
||||
Geschuetzte ungenutzte Netzwerke werden nicht geloescht: bridge none
|
||||
|
||||
Alle oben aufgefuehrten ungenutzten Netzwerke wirklich loeschen? [j/N]: j
|
||||
|
||||
OK: Netzwerk 'old-backend' erfolgreich geloescht.
|
||||
OK: Netzwerk 'test-network' erfolgreich geloescht.
|
||||
|
||||
Ergebnis: 2 geloescht, 0 fehlgeschlagen.
|
||||
```
|
||||
|
||||
@@ -15,6 +15,8 @@ Das Script startet ein interaktives Menü mit folgenden Optionen:
|
||||
- **3** – IPs eines Netzwerks anzeigen (mit Netzwerk-Auswahl)
|
||||
- **4** – Alle belegten IPs anzeigen
|
||||
- **5** – Ungenutzte Netzwerke anzeigen
|
||||
- **6** – Netzwerke löschen
|
||||
- **7** – Alle ungenutzten, löschbaren Netzwerke löschen
|
||||
- **0** – Beenden
|
||||
|
||||
Bei den Optionen **2** und **3** wird eine Netzwerkliste angezeigt, aus der per Nummer ausgewählt werden kann.
|
||||
@@ -35,6 +37,8 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
|
||||
| `ips <netzwerk>` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk |
|
||||
| `ips-all` | Zeigt alle belegten IPv4-Adressen in allen Docker-Netzwerken (aufsteigend sortiert) |
|
||||
| `unused-networks` | Zeigt alle Docker-Netzwerke ohne verbundene Container |
|
||||
| `delete-networks` | Löscht ein interaktiv ausgewähltes Netzwerk |
|
||||
| `delete-unused-networks` | Löscht alle ungenutzten, löschbaren Docker-Netzwerke nach Bestätigung |
|
||||
| `<netzwerk>` | Alias für `inspect <netzwerk>` (Rückwärtskompatibilität) |
|
||||
| `help`, `-h`, `--help` | Zeigt die Hilfe an |
|
||||
|
||||
@@ -47,6 +51,8 @@ bash ./dockernet-inspector.v1.sh my-custom-network
|
||||
bash ./dockernet-inspector.v1.sh ips dockernet
|
||||
bash ./dockernet-inspector.v1.sh ips-all
|
||||
bash ./dockernet-inspector.v1.sh unused-networks
|
||||
bash ./dockernet-inspector.v1.sh delete-networks
|
||||
bash ./dockernet-inspector.v1.sh delete-unused-networks
|
||||
bash ./dockernet-inspector.v1.sh help
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user