networks:
单机部署时,在 dockerfile
中 所有容器的 networks
为同一个网络。
多机部署,不要求在dockerfile
定义networks
为同一个网络。
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
,它的值是通过.env
文件传递的,如果不需要,可以把多机的各个dockerfile里改成写死
的网络名。
多机时,对于extra_hosts
的设置,网上的一些资料看法不一,有的人认为peer节点的该参数要设置其余所有节点的ip
地址。经过一些测试后我发现:只需要设置位于不同机器上的Orderer
节点以及同组织其他节点的ip
。
如果把Org2
的两个Peer
分开到两个机器上,则这两个Peer还需要添加上彼此的IP
映射,因为Orderer
节点只会分发区块给组织的Leader
节点,所以其他节点需要访问Leader
节点来获取区块。
之所以我们没有添加其他组织的节点ip
,是因为不同组织间只能通过锚节点(anchor peers)进行通信,这里在没有设置锚节点的情况下就算我们添加了其他组织的ip
也无济于事,在后面会研究如何设置锚节点来进行跨组织的通信。
多机时,将其他节点加入网络很简单,只需要在peer0.org1
节点的cli
中修改环境变量,将cli
指向其他节点就行了。再将其他节点加入网络之前,记得要在其他主机上启动该节点,不然会失败。
因为其他节点cli
中没有mychannel.block
这个文件,所以需要通过再peer0.org1
节点修改环境变量指向其他节点,然后将其他节点加入网络。当然也可以将mychannel.block
文件传输到其他节点,但那样太麻烦了。