Sammelloeschung fuer ungenutzte Docker-Netzwerke hinzugefuegt
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
||||||
# - Ungenutzte Netzwerke (ohne Container) anzeigen
|
# - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||||
# - Netzwerke interaktiv auswaehlen und loeschen
|
# - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
|
# - Alle ungenutzten, loeschbaren Netzwerke auf einmal entfernen
|
||||||
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
||||||
# Befehle:
|
# Befehle:
|
||||||
# networks - Alle Docker Netzwerke auflisten
|
# networks - Alle Docker Netzwerke auflisten
|
||||||
@@ -15,14 +16,14 @@
|
|||||||
# ips-all - Belegte IPs in allen Netzwerken
|
# ips-all - Belegte IPs in allen Netzwerken
|
||||||
# unused-networks - Netzwerke ohne verbundene Container
|
# unused-networks - Netzwerke ohne verbundene Container
|
||||||
# delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
# delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
|
# delete-unused-networks - Alle ungenutzten, loeschbaren Netzwerke loeschen
|
||||||
# help, -h, --help - Diese Hilfe anzeigen
|
# help, -h, --help - Diese Hilfe anzeigen
|
||||||
# Autor: Patrick Asmus
|
# Autor: Patrick Asmus
|
||||||
# Web: https://www.cleveradmin.de
|
# Web: https://www.cleveradmin.de
|
||||||
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
|
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
|
||||||
# Version: 1.6.0
|
# Version: 1.7.0
|
||||||
# Datum: 10.04.2026
|
# Datum: 08.05.2026
|
||||||
# Modifikation: Schutz fuer Docker-Standardnetzwerke (bridge, host, none) hinzugefuegt;
|
# Modifikation: Sammelloeschung fuer ungenutzte Docker-Netzwerke hinzugefuegt
|
||||||
# Detailansicht zeigt Hinweis statt Bridge-Daten, Loeschen wird blockiert
|
|
||||||
#####################################################
|
#####################################################
|
||||||
|
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
@@ -41,10 +42,15 @@ print_table_title() {
|
|||||||
print_rule "="
|
print_rule "="
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_protected_network() {
|
||||||
|
local net="$1"
|
||||||
|
[[ "$net" == "bridge" || "$net" == "host" || "$net" == "none" || "$net" == "ingress" || "$net" == "docker_gwbridge" ]]
|
||||||
|
}
|
||||||
|
|
||||||
# Hilfe-Funktion
|
# Hilfe-Funktion
|
||||||
show_help() {
|
show_help() {
|
||||||
cat <<HELP
|
cat <<HELP
|
||||||
Dockernet Inspector v1.6.0 - Docker Netzwerk Verwaltungstool
|
Dockernet Inspector v1.7.0 - Docker Netzwerk Verwaltungstool
|
||||||
|
|
||||||
VERWENDUNG:
|
VERWENDUNG:
|
||||||
$0 - Interaktiver Modus (Menü)
|
$0 - Interaktiver Modus (Menü)
|
||||||
@@ -54,6 +60,7 @@ VERWENDUNG:
|
|||||||
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
|
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
|
||||||
$0 unused-networks - Ungenutzte Netzwerke (ohne Container) anzeigen
|
$0 unused-networks - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||||
$0 delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
$0 delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
|
$0 delete-unused-networks - Alle ungenutzten, loeschbaren Netzwerke loeschen
|
||||||
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
|
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
|
||||||
$0 help - Diese Hilfe anzeigen
|
$0 help - Diese Hilfe anzeigen
|
||||||
|
|
||||||
@@ -63,7 +70,9 @@ BEFEHLE:
|
|||||||
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
|
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
|
||||||
unused-networks Zeigt alle Docker Netzwerke ohne verbundene Container
|
unused-networks Zeigt alle Docker Netzwerke ohne verbundene Container
|
||||||
delete-networks Netzwerk per Nummer auswaehlen und loeschen;
|
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:
|
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
|
||||||
- Netzwerktyp (Driver)
|
- Netzwerktyp (Driver)
|
||||||
- Bridge-Interface
|
- Bridge-Interface
|
||||||
@@ -78,6 +87,7 @@ BEISPIELE:
|
|||||||
$0 ips-all
|
$0 ips-all
|
||||||
$0 unused-networks
|
$0 unused-networks
|
||||||
$0 delete-networks
|
$0 delete-networks
|
||||||
|
$0 delete-unused-networks
|
||||||
$0 inspect mynetwork
|
$0 inspect mynetwork
|
||||||
$0 mynetwork
|
$0 mynetwork
|
||||||
$0 -h
|
$0 -h
|
||||||
@@ -219,7 +229,7 @@ delete_networks() {
|
|||||||
local i
|
local i
|
||||||
for ((i=0; i<${#net_array[@]}; i++)); do
|
for ((i=0; i<${#net_array[@]}; i++)); do
|
||||||
local suffix=""
|
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"
|
printf " %d. %s%s\n" "$((i+1))" "${net_array[$i]}" "$suffix"
|
||||||
done
|
done
|
||||||
echo ""
|
echo ""
|
||||||
@@ -236,8 +246,8 @@ delete_networks() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local selected_net="${net_array[$((choice-1))]}"
|
local selected_net="${net_array[$((choice-1))]}"
|
||||||
if [[ "$selected_net" == "bridge" || "$selected_net" == "host" || "$selected_net" == "none" ]]; then
|
if is_protected_network "$selected_net"; then
|
||||||
echo "FEHLER: '$selected_net' ist ein Docker-Standardnetzwerk und kann nicht geloescht werden."
|
echo "FEHLER: '$selected_net' ist ein geschuetztes Docker-Netzwerk und kann nicht geloescht werden."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
@@ -250,11 +260,92 @@ delete_networks() {
|
|||||||
echo ""
|
echo ""
|
||||||
if docker network rm "$selected_net" 2>/dev/null; then
|
if docker network rm "$selected_net" 2>/dev/null; then
|
||||||
echo "OK: Netzwerk '$selected_net' erfolgreich geloescht."
|
echo "OK: Netzwerk '$selected_net' erfolgreich geloescht."
|
||||||
|
return 0
|
||||||
else
|
else
|
||||||
echo "FEHLER: Netzwerk '$selected_net' konnte nicht geloescht werden (wird moeglicherweise noch genutzt)."
|
echo "FEHLER: Netzwerk '$selected_net' konnte nicht geloescht werden (wird moeglicherweise noch genutzt)."
|
||||||
|
return 1
|
||||||
fi
|
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
|
# Interaktive Menü-Funktion
|
||||||
interactive_menu() {
|
interactive_menu() {
|
||||||
while true; do
|
while true; do
|
||||||
@@ -269,9 +360,10 @@ interactive_menu() {
|
|||||||
echo "4. Alle belegten IPs anzeigen"
|
echo "4. Alle belegten IPs anzeigen"
|
||||||
echo "5. Ungenutzte Netzwerke anzeigen"
|
echo "5. Ungenutzte Netzwerke anzeigen"
|
||||||
echo "6. Netzwerke loeschen"
|
echo "6. Netzwerke loeschen"
|
||||||
|
echo "7. Alle ungenutzten Netzwerke loeschen"
|
||||||
echo "0. Beenden"
|
echo "0. Beenden"
|
||||||
echo ""
|
echo ""
|
||||||
read -rp "Bitte waehlen Sie eine Option (0-6): " choice
|
read -rp "Bitte waehlen Sie eine Option (0-7): " choice
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
@@ -309,12 +401,15 @@ interactive_menu() {
|
|||||||
6)
|
6)
|
||||||
delete_networks
|
delete_networks
|
||||||
;;
|
;;
|
||||||
|
7)
|
||||||
|
delete_unused_networks
|
||||||
|
;;
|
||||||
0)
|
0)
|
||||||
echo "Auf Wiedersehen!"
|
echo "Auf Wiedersehen!"
|
||||||
exit 0
|
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
|
sleep 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -428,7 +523,11 @@ case "$COMMAND" in
|
|||||||
;;
|
;;
|
||||||
delete-networks)
|
delete-networks)
|
||||||
delete_networks
|
delete_networks
|
||||||
exit 0
|
exit $?
|
||||||
|
;;
|
||||||
|
delete-unused-networks)
|
||||||
|
delete_unused_networks
|
||||||
|
exit $?
|
||||||
;;
|
;;
|
||||||
help | -h | --help)
|
help | -h | --help)
|
||||||
show_help
|
show_help
|
||||||
|
|||||||
@@ -57,9 +57,11 @@ Dockerdet Inspector - Interaktives Menü
|
|||||||
3. IPs eines Netzwerks anzeigen
|
3. IPs eines Netzwerks anzeigen
|
||||||
4. Alle belegten IPs anzeigen
|
4. Alle belegten IPs anzeigen
|
||||||
5. Ungenutzte Netzwerke anzeigen
|
5. Ungenutzte Netzwerke anzeigen
|
||||||
|
6. Netzwerke loeschen
|
||||||
|
7. Alle ungenutzten Netzwerke loeschen
|
||||||
0. Beenden
|
0. Beenden
|
||||||
|
|
||||||
Bitte waehlen Sie eine Option (0-5):
|
Bitte waehlen Sie eine Option (0-7):
|
||||||
```
|
```
|
||||||
|
|
||||||
## `unused-networks`
|
## `unused-networks`
|
||||||
@@ -72,3 +74,23 @@ NAME DRIVER SCOPE
|
|||||||
old-backend bridge local
|
old-backend bridge local
|
||||||
test-network 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)
|
- **3** – IPs eines Netzwerks anzeigen (mit Netzwerk-Auswahl)
|
||||||
- **4** – Alle belegten IPs anzeigen
|
- **4** – Alle belegten IPs anzeigen
|
||||||
- **5** – Ungenutzte Netzwerke anzeigen
|
- **5** – Ungenutzte Netzwerke anzeigen
|
||||||
|
- **6** – Netzwerke löschen
|
||||||
|
- **7** – Alle ungenutzten, löschbaren Netzwerke löschen
|
||||||
- **0** – Beenden
|
- **0** – Beenden
|
||||||
|
|
||||||
Bei den Optionen **2** und **3** wird eine Netzwerkliste angezeigt, aus der per Nummer ausgewählt werden kann.
|
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 <netzwerk>` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk |
|
||||||
| `ips-all` | Zeigt alle belegten IPv4-Adressen in allen Docker-Netzwerken (aufsteigend sortiert) |
|
| `ips-all` | Zeigt alle belegten IPv4-Adressen in allen Docker-Netzwerken (aufsteigend sortiert) |
|
||||||
| `unused-networks` | Zeigt alle Docker-Netzwerke ohne verbundene Container |
|
| `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) |
|
| `<netzwerk>` | Alias für `inspect <netzwerk>` (Rückwärtskompatibilität) |
|
||||||
| `help`, `-h`, `--help` | Zeigt die Hilfe an |
|
| `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 dockernet
|
||||||
bash ./dockernet-inspector.v1.sh ips-all
|
bash ./dockernet-inspector.v1.sh ips-all
|
||||||
bash ./dockernet-inspector.v1.sh unused-networks
|
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
|
bash ./dockernet-inspector.v1.sh help
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user