当我重新启动计算机并禁用 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)。
假设安装了go,安装boltcli:
go install github.com/spacewander/boltcli@latest
复制 local-kv.db 并使用 Boltcli 打开它:
boltcli /path_to_db_copy/local-kv.db
列出要使用的存储桶:
buckets *
最有可能的是,存储桶是“libnetwork”根据冲突网络的 ID(或其一部分)查找密钥(问题中的 aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106)
keys libnetwork *aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106*
使用返回的密钥(可能是“docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/”)删除记录
del libnetwork docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/
退出boltcli ( Ctrl+ C),停止 Docker 并用更改后的数据库文件覆盖原始数据库文件(建议在执行此操作之前先复制原始数据库文件)。启动 Docker。