如何自动删除重复的 docker 网络
基于 docker-compose 且使用本地挂载卷的设置在实践中很少有常见的故障模式。最重要的故障模式是 docker 系统升级停止所有服务以及同名的重复网络阻止服务启动。有时,docker-compose 没有正确删除旧网络,可能是由于不干净或未完成的关闭过程。
这将导致类似以下的日志消息
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这个简单的脚本将找到所有重复的网络名称并简单地删除其中一个。
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)只需不带任何参数调用此脚本
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