离线环境下如何通过本地npm registry在Hyperledger Composer中实例化链码?
离线环境下Hyperledger Fabric链码实例化解决方案
我之前也碰到过离线环境里链码实例化时,因npm install无法访问公网registry失败的问题,分享下我通过搭建本地npm registry容器解决的完整方案:
1. 在docker-compose.yml中添加本地npm Registry容器
我选用Verdaccio作为轻量的本地npm registry,将它加入Fabric容器所在的composer_default网络,确保链码容器能访问到它。配置片段如下:
npmregistry: image: verdaccio/verdaccio:latest container_name: npmregistry ports: - "4873:4873" networks: - composer_default volumes: - ./verdaccio/storage:/verdaccio/storage - ./verdaccio/config:/verdaccio/conf
挂载存储和配置目录是为了持久化依赖包和自定义registry配置,避免容器重启后丢失数据。
2. 提前准备链码依赖包
离线环境下得先把链码需要的依赖提前准备好:
- 在联网机器上,进入链码目录执行
npm install --package-lock-only生成精确的依赖锁文件 - 或者用
npm pack把所有依赖包打包成.tgz文件,之后通过Verdaccio的web界面(http://localhost:4873)或者npm publish命令上传到本地registry
3. 让链码容器指向本地registry
在你的链码根目录下创建.npmrc文件,内容设置为:
registry=http://npmregistry:4873/
这样链码容器在执行npm install时,会自动请求本地的registry,而不是默认的公网npm源。
4. 启动容器并验证连通性
执行docker-compose up -d启动所有容器(包括npmregistry),然后可以在任意同网络的Fabric容器里验证registry是否可用:
docker exec -it peer0.org1.example.com bash npm view lodash # 替换成你的链码实际依赖包名
如果能正常返回包信息,说明本地registry已经可以被链码容器访问。
5. 执行链码实例化
现在就可以正常执行链码实例化命令了,比如:
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
此时链码容器会连接本地npmregistry完成依赖安装,全程不需要公网连接。
内容的提问来源于stack exchange,提问作者aldred
相关产品推荐
相关产品推荐

