Wie man doppelte Docker-Netzwerke automatisch entfernt
English
Deutsch
docker-compose-basierte Setups mit lokal gemounteten Volumes haben in der Praxis sehr wenige häufige Fehlermodi. Die wichtigsten sind System-Upgrades von docker, die alle Dienste stoppen, und doppelte Netzwerke mit demselben Namen, die den Start eines Dienstes verhindern. Manchmal löscht docker-compose das alte Netzwerk nicht ordnungsgemäß, möglicherweise aufgrund unsauberer oder unvollständiger Shutdown-Prozeduren.
Dies führt zu Protokollmeldungen wie
docker_network_log_excerpt.txt
May 22 21:52:15 myserver docker-compose[2384642]: Removing network etherpad-mydomain_default
May 22 21:52:15 myserver docker-compose[2384642]: network etherpad-mydomain_default is ambiguous (2 matches found based on name)
May 22 21:52:16 myserver systemd[1]: etherpad-mydomain.service: Control process exited, code=exited, status=1/FAILUREDieses einfache Skript findet alle doppelten Netzwerknamen und löscht einfach eines davon.
docker_remove_duplicate_networks.py
#!/usr/bin/env python3
import subprocess
import json
already_seen_networks = set()
output = subprocess.check_output(["docker", "network", "ls", "--format", "{{json .}}"])
for line in output.decode("utf-8").split("\n"):
line = line.strip()
if not line: continue
obj = json.loads(line.strip())
id = obj["ID"]
name = obj["Name"]
if name in already_seen_networks:
print(f"Detected duplicate network {name}. Removing duplicate network {id}...")
subprocess.check_output(["docker", "network", "rm", id])
already_seen_networks.add(name)Rufen Sie dieses Skript einfach ohne Argumente auf
run_docker_remove_duplicate_networks.sh
python docker-remove-duplicate-networks.pyIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow