无法连接IPFS报Error: no protocol with name: quic-v1问题求助
解决ipfs-http-client调用ipfs.id()时报错"no protocol with name: quic-v1"
问题根源
你使用的ipfs-http-client v56.0.3依赖的multiaddr版本不支持quic-v1协议,而Docker中运行的最新版Kubo节点默认启用了QUIC v1协议,调用ipfs.id()返回的节点地址里包含quic-v1字段,客户端解析时因无法识别该协议抛出错误。
解决办法
方法1:升级ipfs-http-client到兼容版本
直接将ipfs-http-client升级到支持quic-v1的新版本(v60及以上版本已适配):
npm install ipfs-http-client@latest
升级后重新运行代码,即可正常获取节点ID。
方法2:禁用Kubo节点的QUIC v1协议
如果不想升级客户端,可修改Docker中Kubo节点的配置,关闭QUIC v1:
- 进入运行中的Kubo容器:
docker exec -it ipfs_host sh
- 更新IPFS swarm地址配置,移除包含
quic-v1的条目:
ipfs config Addresses.Swarm --json '["/ip4/0.0.0.0/tcp/4001", "/ip6/::/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic"]'
- 重启容器使配置生效:
docker restart ipfs_host
之后再运行Node.js代码,即可避免协议解析错误。
方法3:临时过滤不支持的地址(不推荐)
如果以上两种方案都无法实施,可在客户端代码中手动过滤掉包含quic-v1的地址:
const client = require("ipfs-http-client"); const ipfs = client.create("/ip4/127.0.0.1/tcp/5001"); const test = async () => { let id = await ipfs.id(); // 过滤quic-v1协议的地址 id.addresses = id.addresses.filter(addr => !addr.includes('quic-v1')); console.log(id); }; module.exports = { test };
此方法仅为临时规避问题,建议优先采用前两种方案从根源解决。
内容的提问来源于stack exchange,提问作者iPhoneJavaDev
相关产品推荐
相关产品推荐

