docker-compose
based setups with locally mounted volumes have very few common failure modes in practice. The most important ones are system upgrades to docker
stopping all the services and duplicate networks with the same name preventing the startup of a service. Sometimes, docker-compose
does not delete the old network properly, possibly due to unclean or unfinished shutdown procedures.
This will result in log messages such as
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
This simple script will find all duplicate network names and simply delete one of them.
#!/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)
Just call this script without any arguments
python docker-remove-duplicate-networks.py