无网络环境下执行composer network upgrade报RESOURCE_EXHAUSTED错误
解决无网环境下 Composer Network Upgrade 失败问题(搭配 Verdaccio 私有源)
作为经常处理Hyperledger Composer离线部署的开发者,我来帮你一步步排查和解决这个问题——毕竟在无网环境下用私有源,很多坑都藏在配置细节里:
1. 先确认 Verdaccio 是否真的接管了所有依赖拉取
Composer的network命令执行时,可能会绕过你以为的全局配置去拉取依赖,所以先做这几个检查:
- 执行
npm config get registry,确认输出是你的Verdaccio地址(比如http://your-verdaccio-ip:4873/) - 查看项目根目录下有没有
.npmrc文件,如果有,里面的registry必须和全局配置一致,避免局部配置覆盖全局设置 - 登录Verdaccio的Web管理界面(默认是4873端口),搜索
composer-cli、composer-admin以及你业务网络的所有依赖包,确认它们都已经被缓存到私有源里了
2. 给 Upgrade 命令显式指定私有源参数
Composer 0.19.0的network upgrade命令默认会走官方npm源,就算你全局配置了私有源也可能不生效,所以必须显式加上--npm-registry参数:
composer network upgrade -c admin@your-network -n your-network -V 1.0.1 --npm-registry http://your-verdaccio-ip:4873/
记得把-V后面的版本号替换成你要升级的实际版本,admin@your-network和your-network替换成你的身份和网络名称。
3. 清理本地缓存,避免残留的公网依赖记录
无网环境下,本地缓存里可能还存着指向公网的依赖信息,导致命令还是尝试去外网拉取:
- 清理npm缓存:
npm cache clean --force - 清理Composer的本地缓存:
composer clear cache(注意这是Hyperledger Composer的缓存,不是PHP的Composer工具) - 删除项目目录下的
node_modules和package-lock.json,然后重新从私有源安装依赖:npm install --registry http://your-verdaccio-ip:4873/
4. 检查 Verdaccio 的配置和包完整性
有时候私有源的权限设置或者缓存的包不完整,也会导致升级失败:
- 打开Verdaccio的配置文件(默认路径是
~/.config/verdaccio/config.yaml),检查packages部分的配置是否允许所有包的拉取:
由于你的环境无网,packages: '@*/*': access: $all publish: $authenticated proxy: npmjs '**': access: $all publish: $authenticated proxy: npmjsproxy: npmjs这个配置其实没用,你需要提前在有网环境下把所有需要的依赖包上传到Verdaccio(可以用npm publish命令,或者通过Web界面手动上传) - 核对你业务网络
package.json里的依赖版本,确保这些版本在Verdaccio中都存在,没有版本不匹配的情况
5. 排查 Hyperledger Fabric 网络本身的问题
有时候升级失败和npm源无关,是Fabric网络的问题:
- 用
docker ps检查Peer、Orderer等容器是否都正常运行 - 用
composer identity list -c admin@your-network确认admin用户的证书有效,且拥有足够的权限执行升级操作
如果以上步骤都试过还是失败,建议加上-d参数开启调试模式重新执行命令,拿到详细的错误日志:
composer network upgrade -c admin@your-network -n your-network -V 1.0.1 --npm-registry http://your-verdaccio-ip:4873/ -d
调试日志会明确告诉你是哪个依赖拉取失败,还是Fabric网络的某个环节出了问题,这样就能精准定位了。
内容的提问来源于stack exchange,提问作者Firoz Ansari
相关产品推荐
相关产品推荐

