ERROR: 2 matches found based on name: network <nameofservice>_default is ambiguous

ERROR: 2 matches found based on name: network <nameofservice>_default is ambiguous

我正在使用命令

构建docker图像
docker-compose -f "docker-compose.yml" up -d --build 

但它 returns 我出错了

ERROR: 2 matches found based on name: network officeconverter_default is ambiguous

这有点清楚,在我的机器中有两个同名的网络试图存在。

问题是如何从 docker 网络中删除网络

PS E:\repos\Github\officeconverter> docker network ls
NETWORK ID          NAME                        DRIVER              SCOPE
868c88a83bd6        bridge                      bridge              local
92f7d20ed432        officeconverter_default     bridge              local
3f96cfb7b591        officeconverter_default     bridge              local

解决方法很简单!

只需删除网络。

喜欢docker network rm <network Id> <space> <network Id> ....

PS E:\repos\Github\officeconverter> docker network rm 92f7d20ed432 3f96cfb7b591
92f7d20ed432
3f96cfb7b591
PS E:\repos\Github\officeconverter> docker network ls
NETWORK ID          NAME                        DRIVER              SCOPE
868c88a83bd6        bridge                      bridge              local

对我有用的解决方案是:

docker system prune -af
docker volume prune --force.

尝试: docker network prune

这将删除您的所有网络。

只需 运行 docker 删除 p运行e 它将删除所有网络并重新创建。

使用 sudo cronjob -e 打开 cronjob,然后添加新行

*/1 * * * * docker network prune -f

这将每分钟清理未使用的网络(如果有)。

正如其他人所说,您可以 docker network rm <network id> 实际上 删除它们。

但如果您需要选择删除哪一个,您可以:

$ docker network inspect d5867f0be024
[
    {
        "Name": "minikube",
        "Id": "d5867f0be024b1c81237fba1eaef3f1ff53b75e15ab84d46a13dcde53809934e",
        "Created": "2022-02-16T19:24:57.7203334-05:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        ...
    }
]

...然后查看 Created 时间(或其他元数据)来决定要删除的内容。

在我的例子中,我需要删除较新的并保留较旧的。

一个选项是创建一个新网络,使用不同的网络名称,并将您的 docker 容器连接到它。
有歧义的网桥网络名称可能会发生类似的错误。
一个人写了一篇关于如何解决这个问题的完整博客 post。
就我而言,我发现它非常有用,我相信即使您处理的网络不是网桥,这对处于类似情况的其他人也会有用:https://www.jorgeanaya.dev/en/bin/docker-network-name-is-ambiguous/

这是来自博客 post 的简短解决方法(所有功劳都归功于 Jorge Anaya):

  1. 创建一个新网络。使用参数-d指定驱动

    docker network create -d bridge [new-network-name]

  2. 断开容器与模糊网络的连接

    docker network disconnect bridge [container-name]

  3. 将容器连接到新网络

    docker network connect [new-network-name] [container-name]

  4. 可选。清除我们的网络并摆脱未使用的网络

    docker network rm $(docker network ls -q)

就是这样,现在我们应该可以启动我们的容器了。
不要忘记在每个命令的开头添加 sudo 以获得权​​限。