如何不使用startFabric.sh重启Hyperledger Composer容器并保留网络
解决Hyperledger Composer链码容器启动失败的问题
首先咱们拆解下这个错误:peer will not accept external chaincode connection name:"default:0.0.1" (except in dev mode),这说明你的Peer节点是在非开发模式下运行的,但链码容器尝试以外部链码的方式连接Peer,而默认情况下非开发模式的Peer不允许这种外部连接。下面是具体的解决思路:
思路1:让Peer允许外部链码连接(非开发模式下)
如果不想切换到开发模式,可以修改Peer配置,开放外部链码连接权限:
- 进入
fabric-tools/fabric-scripts/hlfv11/composer目录,打开docker-compose.yml文件 - 在
peer0.org1.example.com的environment部分添加以下配置:- CORE_PEER_CHAINCODE_ENABLE_EXTERNAL=true - CORE_CHAINCODE_STARTUPTIMEOUT=300s - 保存文件后重启Peer容器:
docker-compose restart peer0.org1.example.com - 再尝试启动链码容器:
docker start <你的链码容器ID/名称>
思路2:切换到开发模式运行Peer(适合调试场景)
如果只是需要调试链码,可以切换到开发模式运行Peer:
- 使用开发模式的配置文件启动所有服务:
docker-compose -f docker-compose-dev.yml up -d - 手动启动链码容器时,确保环境变量配置正确(要和之前部署的链码信息完全匹配):
docker run -d \ --name dev-peer0.org1.example.com-default-0.0.1 \ --network composer_default \ -e CORE_CHAINCODE_ID_NAME=default:0.0.1 \ -e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ -e CORE_CHAINCODE_LOGLEVEL=debug \ <你的链码镜像ID>
思路3:重新启动整个环境(保留已部署数据)
如果上面的方法都没效果,可以尝试用docker-compose up -d重新启动服务,这个命令会重新创建容器但不会删除数据卷,你的已部署网络数据不会丢失:
# 先停止所有容器 docker-compose stop # 重新启动(会自动生成正确的容器配置) docker-compose up -d
重启后Peer会自动启动对应的链码容器,避免手动启动带来的外部连接问题。
额外检查点
- 确认链码容器和Peer容器在同一个Docker网络中:用
docker inspect peer0.org1.example.com查看Peer的网络,再用docker inspect <链码容器名称>核对,若不一致,执行docker network connect <网络名称> <链码容器名称>补全网络连接。 - 确保链码ID(
default:0.0.1)和你之前部署的链码完全一致,包括名称和版本号,不能有拼写错误。
内容的提问来源于stack exchange,提问作者Francisco Villaseñor
相关产品推荐
相关产品推荐

