docker 抱怨我的网桥名称与不可见的网络有冲突

docker 抱怨我的网桥名称与不可见的网络有冲突

当我重新启动计算机并禁用 docker.service 时,我的 ip a 输出中没有 br1。

但是,启动docker后,出现了br1。

sudo docker network inspect没有显示任何相关网络。

Error response from daemon: cannot create network 33618cb1603a773a11d97750182fde9d8feb98c03a9882bb0c4539c3ea3fbe1d (br1): conflicts with network aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106 (br1): networks have same bridge name

sudo docker network inspect aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106
[]
Error response from daemon: network aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106 not found

那么这个网络在哪里,我怎样才能找到它呢?

我做到了sudo docker network prune,现在只剩下 3 个条目了。但 br1 仍然被创建。

答案1

当删除 Docker 网络失败且数据库中保留网桥记录时,就会发生这种情况。数据库位置是/var/lib/docker/network/files/local-kv.db(AlmaLinux)。尽管通常的建议是停止 Docker,删除此数据库,然后重建容器,但这并不是大型基础设施的最佳解决方案。在这种情况下,更好的解决方案是从数据库中删除剩余的桥接记录。这可以通过使用 Boltcli 工具来完成(https://github.com/spacewander/boltcli)。

  1. 假设安装了go,安装boltcli: go install github.com/spacewander/boltcli@latest

  2. 复制 local-kv.db 并使用 Boltcli 打开它: boltcli /path_to_db_copy/local-kv.db

  3. 列出要使用的存储桶: buckets * 最有可能的是,存储桶是“libnetwork”

  4. 根据冲突网络的 ID(或其一部分)查找密钥(问题中的 aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106)

    keys libnetwork *aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106*

  5. 使用返回的密钥(可能是“docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/”)删除记录

    del libnetwork docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/

  6. 退出boltcli ( Ctrl+ C),停止 Docker 并用更改后的数据库文件覆盖原始数据库文件(建议在执行此操作之前先复制原始数据库文件)。启动 Docker。

相关内容