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/FAILURE

Dieses 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.py

Check out similar posts by category: Docker, Python