关键词:
一、本实验所需容器介绍
- 一个cli端容器,通过调整cli端容器使用的证书,以不同身份来使用cli端容器
- 三个orderere容器——orderer0,orderer1,orderer2
- 四个peer容器——org1的peer0,org1的peer1,org2的peer0,org2的peer1
- 这八个容器运行在一个自定义的容器网络中,创建网络命令:
docker network create fabric_net
二、创建cli容器
- 创建chaincodes目录,用于之后上传chaincode相关文件,命令:
mkdir -p /home/test_fabric/chaincodes
- 以docker run形式创建容器,通过设置环境变量
CORE_PEER_TLS_ENABLED=true
开启tls,命令,
docker run --rm -it --name fabric-cli --hostname fabric-cli --network fabric_net \\
-e CORE_PEER_ID=fabric-cli \\
-e CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt \\
-e CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e CORE_PEER_TLS_ENABLED=true \\
-e ORDERER_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem \\
-v /home/test_fabric/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml \\
-v /home/test_fabric/crypto-config:/etc/hyperledger/fabric/crypto-config \\
-v /home/test_fabric/channel-artifacts:/tmp/channel-artifacts \\
-v /home/test_fabric/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml \\
-v /home/test_fabric/chaincodes:/go/src/chaincodes \\
yeasy/hyperledger-fabric:2.3.3 /bin/bash
三、创建orderer容器
3.1、创建orderer0容器
- 创建命令
docker run -it --name orderer0.example.com --hostname orderer0.example.com -p 7050:7050 --network fabric_net \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 \\
-e ORDERER_GENERAL_LISTENPORT=7050 \\
-e ORDERER_GENERAL_GENESISMETHOD=file \\
-e ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block \\
-e ORDERER_GENERAL_LOCALMSPID=OrdererMSP \\
-e ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp \\
-e ORDERER_GENERAL_LEDGERTYPE=file \\
-e ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443 \\
-e ORDERER_METRICS_PROVIDER=prometheus \\
-e ORDERER_GENERAL_TLS_ENABLED=true \\
-e ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-e ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/etc/hyperledger/fabric/tls \\
-v /home/test_fabric/channel-artifacts/orderer0.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block \\
yeasy/hyperledger-fabric-orderer:2.3.3 /bin/bash
- 创建后进入容器执行命令:
orderer start
3.2、创建orderer1容器
- 创建命令
docker run -it --name orderer1.example.com --hostname orderer1.example.com -p 8050:7050 --network fabric_net\\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10 \\
-e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 \\
-e ORDERER_GENERAL_LISTENPORT=7050 \\
-e ORDERER_GENERAL_GENESISMETHOD=file \\
-e ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block \\
-e ORDERER_GENERAL_LOCALMSPID=OrdererMSP \\
-e ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp \\
-e ORDERER_GENERAL_LEDGERTYPE=file \\
-e ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443 \\
-e ORDERER_METRICS_PROVIDER=prometheus \\
-e ORDERER_GENERAL_TLS_ENABLED=true \\
-e ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-e ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/etc/hyperledger/fabric/tls \\
-v /home/test_fabric/channel-artifacts/orderer1.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block \\
yeasy/hyperledger-fabric-orderer:2.3.3 /bin/bash
- 进入容器后执行命令:
orderer start
3.3、创建orderer2容器
- 创建命令
docker run -it --name orderer2.example.com --hostname orderer2.example.com -p 9050:7050 --network fabric_net\\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10 \\
-e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 \\
-e ORDERER_GENERAL_LISTENPORT=7050 \\
-e ORDERER_GENERAL_GENESISMETHOD=file \\
-e ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block \\
-e ORDERER_GENERAL_LOCALMSPID=OrdererMSP \\
-e ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp \\
-e ORDERER_GENERAL_LEDGERTYPE=file \\
-e ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443 \\
-e ORDERER_METRICS_PROVIDER=prometheus \\
-e ORDERER_GENERAL_TLS_ENABLED=true \\
-e ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-e ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key \\
-e ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt \\
-e ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt] \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/etc/hyperledger/fabric/tls \\
-v /home/test_fabric/channel-artifacts/orderer2.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block \\
yeasy/hyperledger-fabric-orderer:2.3.3 /bin/bash
- 进入容器后执行命令:
orderer start
四、创建peer容器
4.1、创建org1-peer0容器
- 命令:
docker run -it --name peer0.org1.example.com --hostname peer0.org1.example.com -p 7051:7051 --network fabric_net \\
-e CORE_PEER_ID=peer0.org1.example.com \\
-e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \\
-e CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 \\
-e CORE_PEER_LOCALMSPID=Org1MSP \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e CORE_PEER_ADDRESSAUTODETECT=false \\
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net \\
-e CORE_PEER_GOSSIP_USELEADERELECTION=true \\
-e CORE_PEER_GOSSIP_ORGLEADER=false \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 \\
-e CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 \\
-e CORE_METRICS_PROVIDER=prometheus \\
-e CORE_PEER_PROFILE_ENABLED=false \\
-e CORE_PEER_TLS_ENABLED=true \\
-e CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt \\
-e CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key \\
-e CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt \\
-e CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3 \\
-e CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3 \\
-v /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls \\
-v /var/run/docker.sock:/var/run/docker.sock \\
yeasy/hyperledger-fabric-peer:2.3.3 /bin/bash
- 进入容器执行命令:
peer node start
4.2、创建org1-peer1容器
- 创建命令
docker run -it --name peer1.org1.example.com --hostname peer1.org1.example.com -p 8051:7051 --network fabric_net \\
-e CORE_PEER_ID=peer1.org1.example.com \\
-e CORE_PEER_ADDRESS=peer1.org1.example.com:7051 \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 \\
-e CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052 \\
-e CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 \\
-e CORE_PEER_LOCALMSPID=Org1MSP \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e CORE_PEER_ADDRESSAUTODETECT=false \\
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net \\
-e CORE_PEER_GOSSIP_USELEADERELECTION=true \\
-e CORE_PEER_GOSSIP_ORGLEADER=false \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 \\
-e CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 \\
-e CORE_METRICS_PROVIDER=prometheus \\
-e CORE_PEER_PROFILE_ENABLED=false \\
-e CORE_PEER_TLS_ENABLED=true \\
-e CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt \\
-e CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key \\
-e CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt \\
-e CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3 \\
-e CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3 \\
-v /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls \\
-v /var/run/docker.sock:/var/run/docker.sock \\
yeasy/hyperledger-fabric-peer:2.3.3 /bin/bash
- 进入容器执行命令:
peer node start
4.3、创建org2-peer0容器
- 创建命令
docker run -it --name peer0.org2.example.com --hostname peer0.org2.example.com -p 9051:7051 --network fabric_net \\
-e CORE_PEER_ID=peer0.org2.example.com \\
-e CORE_PEER_ADDRESS=peer0.org2.example.com:7051 \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 \\
-e CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052 \\
-e CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 \\
-e CORE_PEER_LOCALMSPID=Org2MSP \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e CORE_PEER_ADDRESSAUTODETECT=false \\
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net \\
-e CORE_PEER_GOSSIP_USELEADERELECTION=true \\
-e CORE_PEER_GOSSIP_ORGLEADER=false \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 \\
-e CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 \\
-e CORE_METRICS_PROVIDER=prometheus \\
-e CORE_PEER_PROFILE_ENABLED=false \\
-e CORE_PEER_TLS_ENABLED=true \\
-e CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt \\
-e CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key \\
-e CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt \\
-e CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3 \\
-e CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3 \\
-v /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls \\
-v /var/run/docker.sock:/var/run/docker.sock \\
yeasy/hyperledger-fabric-peer:2.3.3 /bin/bash
- 进入容器执行命令:
peer node start
4.4、创建org2-peer0容器
- 创建命令
docker run -it --name peer1.org2.example.com --hostname peer1.org2.example.com -p 10051:7051 --network fabric_net \\
-e CORE_PEER_ID=peer1.org2.example.com \\
-e CORE_PEER_ADDRESS=peer1.org2.example.com:7051 \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 \\
-e CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052 \\
-e CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 \\
-e CORE_PEER_LOCALMSPID=Org2MS \\
-e FABRIC_LOGGING_SPEC=DEBUG \\
-e CORE_PEER_ADDRESSAUTODETECT=false \\
-e CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net \\
-e CORE_PEER_GOSSIP_USELEADERELECTION=true \\
-e CORE_PEER_GOSSIP_ORGLEADER=false \\
-e CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 \\
-e CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 \\
-e CORE_METRICS_PROVIDER=prometheus \\
-e CORE_PEER_PROFILE_ENABLED=false \\
-e CORE_PEER_TLS_ENABLED=true \\
-e CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt \\
-e CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key \\
-e CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt \\
-e CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3 \\
-e CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3 \\
-v /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp \\
-v /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls \\
-v /var/run/docker.sock:/var/run/docker.sock \\
yeasy/hyperledger-fabric-peer:2.3.3 /bin/bash
- 进入容器执行命令:
peer node start
五、通过docker-compose.yaml文件启动orderer以及peer节点
- 因为cli容器没有阻塞语句,所以不建议使用此方法创建cli容器
- 先拉取相关镜像,命令
docker pull yeasy/hyperledger-fabric-orderer:2.3.3
docker pull yeasy/hyperledger-fabric-peer:2.3.3
- 创建docker-compose.yaml文件,命令:
touch /home/test_fabric/docker-compose.yaml
- 使用docker-compose.yaml启动,命令:
docker-compose -f /home/test_fabric/docker-compose.yaml up -d
- docker-compose.yaml内容
version: '3'
services:
orderer0.example.com: # There can be multiple orderers
container_name: orderer0.example.com
hostname: orderer0.example.com
image: yeasy/hyperledger-fabric-orderer:2.3.3
network_mode: fabric_net
ports:
- 7050:7050
environment:
- FABRIC_LOGGING_SPEC=DEBUG
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
- ORDERER_GENERAL_LISTENPORT=7050
- ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
- ORDERER_GENERAL_LEDGERTYPE=file
- ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443
- ORDERER_METRICS_PROVIDER=prometheus
- ORDERER_GENERAL_TLS_ENABLED=true
- ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
volumes:
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/etc/hyperledger/fabric/tls
- /home/test_fabric/channel-artifacts/orderer0.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
command: orderer start
orderer1.example.com: # There can be multiple orderers
container_name: orderer1.example.com
hostname: orderer1.example.com
image: yeasy/hyperledger-fabric-orderer:2.3.3
network_mode: fabric_net
ports:
- 8050:7050
environment:
- ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10
- FABRIC_LOGGING_SPEC=DEBUG
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
- ORDERER_GENERAL_LISTENPORT=7050
- ORDERER_GENERAL_GENESISMETHOD=file # default: provisional
- ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block # by default, all materials should be put under $FABRIC_CFG_PATH, which defaults to /etc/hyperledger/fabric
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP # default: DEFAULT
- ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
- ORDERER_GENERAL_LEDGERTYPE=file
- ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443 # operation RESTful API
- ORDERER_METRICS_PROVIDER=prometheus # prometheus will pull metrics from orderer via /metrics RESTful API
- ORDERER_GENERAL_TLS_ENABLED=true # default: false
- ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
volumes:
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/etc/hyperledger/fabric/tls
- /home/test_fabric/channel-artifacts/orderer1.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
command: orderer start
orderer2.example.com: # There can be multiple orderers
container_name: orderer2.example.com
hostname: orderer2.example.com
image: yeasy/hyperledger-fabric-orderer:2.3.3
network_mode: fabric_net
ports:
- 9050:7050
environment:
- ORDERER_GENERAL_CLUSTER_SENDBUFFERSIZE=10
- FABRIC_LOGGING_SPEC=DEBUG
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # default: 127.0.0.1
- ORDERER_GENERAL_LISTENPORT=7050
- ORDERER_GENERAL_GENESISMETHOD=file # default: provisional
- ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/orderer.genesis.block # by default, all materials should be put under $FABRIC_CFG_PATH, which defaults to /etc/hyperledger/fabric
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP # default: DEFAULT
- ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/msp
- ORDERER_GENERAL_LEDGERTYPE=file
- ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443 # operation RESTful API
- ORDERER_METRICS_PROVIDER=prometheus # prometheus will pull metrics from orderer via /metrics RESTful API
- ORDERER_GENERAL_TLS_ENABLED=true # default: false
- ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/etc/hyperledger/fabric/tls/server.key
- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/etc/hyperledger/fabric/tls/server.crt
- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/etc/hyperledger/fabric/tls/ca.crt]
volumes:
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/etc/hyperledger/fabric/tls
- /home/test_fabric/channel-artifacts/orderer2.genesis.block:/etc/hyperledger/fabric/orderer.genesis.block
command: orderer start
peer0.org1.example.com:
container_name: peer0.org1.example.com
hostname: peer0.org1.example.com
image: yeasy/hyperledger-fabric-peer:2.3.3
network_mode: fabric_net
ports:
- 7051:7051
environment:
- CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_ADDRESSAUTODETECT=false
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net # uncomment this to use specific network
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false # whether this node is the org leader, default to false
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 # change to external addr for peers in other orgs
- CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 # operation RESTful API
- CORE_METRICS_PROVIDER=prometheus # prometheus will pull metrics from fabric via /metrics RESTful API
- CORE_PEER_PROFILE_ENABLED=false
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
- CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3
- CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3
volumes:
- /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
- /var/run/docker.sock:/var/run/docker.sock
command: peer node start
depends_on:
- orderer0.example.com
- orderer1.example.com
- orderer2.example.com
peer1.org1.example.com:
container_name: peer1.org1.example.com
hostname: peer1.org1.example.com
image: yeasy/hyperledger-fabric-peer:2.3.3
network_mode: fabric_net
ports:
- 8051:7051
environment:
- CORE_PEER_ID=peer1.org1.example.com
- CORE_PEER_ADDRESS=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_ADDRESSAUTODETECT=false
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net # uncomment this to use specific network
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false # whether this node is the org leader, default to false
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 # change to external addr for peers in other orgs
- CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 # operation RESTful API
- CORE_METRICS_PROVIDER=prometheus # prometheus will pull metrics from fabric via /metrics RESTful API
- CORE_PEER_PROFILE_ENABLED=false
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
- CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3
- CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3
volumes:
- /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
- /var/run/docker.sock:/var/run/docker.sock
command: peer node start
depends_on:
- orderer0.example.com
- orderer1.example.com
- orderer2.example.com
peer0.org2.example.com:
container_name: peer0.org2.example.com
hostname: peer0.org2.example.com
image: yeasy/hyperledger-fabric-peer:2.3.3
network_mode: fabric_net
ports:
- 9051:7051
environment:
- CORE_PEER_ID=peer0.org2.example.com
- CORE_PEER_ADDRESS=peer0.org2.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
- CORE_PEER_LOCALMSPID=Org2MSP
- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_ADDRESSAUTODETECT=false
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_net # uncomment this to use specific network
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false # whether this node is the org leader, default to false
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=0.0.0.0:7051 # change to external addr for peers in other orgs
- CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443 # operation RESTful API
- CORE_METRICS_PROVIDER=prometheus # prometheus will pull metrics from fabric via /metrics RESTful API
- CORE_PEER_PROFILE_ENABLED=false
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
- CORE_CHAINCODE_BUILDER=hyperledger/fabric-ccenv:2.3.3
- CORE_CHAINCODE_NODE_RUNTIME=hyperledger/fabric-nodeenv:2.3.3
volumes:
- /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
- /home/test_fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
- /var/run/docker.sock:/var/run/docker.sock
command: peer node start
depends_on:
- orderer0.example.com
- orderer1.example.com
- orderer2.example.com
peer1.org2.example.com:
container_name: peer1.org2.example.com
hostname:第四节——容器数据卷(代码片段)
为什么需要容器数据卷容器数据卷:可以在不同容器之中共用数据,如不同容器中的mysql使用相同的数据使用容器数据卷可以将容器中的数据同步到本地使用数据卷方式一:使用-v直接使用命令来挂载,命令:d... 查看详情
cisco网络基础小实验第四节
第四章交换机划分VLAN配置本文讲述交换机VLAN问题,实验为同VLAN可通信,不同VLAN无法通信 查看详情
第四节——配置文件解释(代码片段)
一、scope解释scope的值有两个,分别是singleton和prototypesingle是默认值,表示每次从xml取出的UserDaoImpl类都是唯一一个,且类的创建时机是在创建app对象时同时创建UserDao类//测试代码ApplicationContextapp=newClassPathXmlApplicatio... 查看详情
第四节——生成go测试代码(代码片段)
第四章——在Go中生成和序列化protobuf消息4.1、创建工作文件创建一个sample包来生成一些随机的笔记本电脑数据创建sample/generator.go文件创建sample/random.go文件4.2、生成随机键盘在sample/generator.go文件中一个函数NewKeyboard(),返回... 查看详情
easyclickhtmlui第四节列表标签(代码片段)
EasyClickHtmlUI第四节列表标签列表标签的种类无序列表标签(ul标签)有序列表标签(ol标签)无序列表<!--ul标签定义无序列表--><ul><!--li标签定义列表项目--><li>列表标题一</li><li>列表标题二</li><li>列... 查看详情
第四节——数据表与约束(代码片段)
数据表的使用一、表的使用表的创建,命令:creaettable[ifnotexists]表名(列名数据类型列约束,列名数据类型列约束,......);//ifnotexists不是必须的,列约束不是必须的eg:createtableifnotexiststesttable(idintprimarykey,nametestnotnull);... 查看详情
第一章第四节helloworld程序(代码片段)
1、第一个HelloWorld程序 上节完成Java环境变量配置之后,我们就可以写第一个程序了。 首先,我们在硬盘上创建一个test.txt文件,并把test.txt文件改成后缀为.java的test.java文件,并用记事本打开,写下如下代码: classHell... 查看详情
第四节——继承与多态(代码片段)
继承的学习一、继承的特性子类拥有父类非private的属性(成员变量,类似但不全是)、方法。子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。多态的学习一、多态的概念多态:同一个对象,在不同时... 查看详情
第一周第四节用户模式救援模式及虚拟机克隆免秘钥交互式登录(代码片段)
虚拟机单用户模式、救援模式及虚拟机克隆免秘钥交互式登录单用户模式、救援模式命令及运行级别介绍:重启命令:reboot、init6、shutdown-rnow关机命令:init0、poweroff运行级别:0-halt(DoNOTsetinitdefaulttothis)运行级别0:系统停机状态... 查看详情
概述-第四节:计算机网络的性能指标(代码片段)
文章目录(1)速率(2)带宽(3)吞吐量(4)时延①:基本概念②:计算公式(5)时延带宽积(6)往返时间RTT(7)利用率(8)丢包率计算机网络的性 查看详情
第四节——解析makefile(代码片段)
一、解析makefile文件makefike文件原文:#Makefiletobootupthenetwork,anddotestingwithchannel,chaincode#Run`maketest`willpassalltestingcases,anddeletethenetwork#Run`makeready`willcreateanetwork,passtestingcases,andstandthereformanualtest,e.g.,maketest_channel_list#support... 查看详情
网络层-第四节:ipv6(代码片段)
文章目录一:IPv6数据报格式(1)IPv4首部和IPv6首部(2)IPv6数据报格式二:IPv6和IPv4的区别三:IPv6地址(1)IPv6地址表示方法(2)IPv6基本地址类型四:IPv6向IPv4过渡的策略解决IP地址... 查看详情
第三周第四节dfdufdisk命令及磁盘分区(代码片段)
df,du,fidsk命令df命令:用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。命令选项:-h:以KB以上的单位显示(M,G),可读性较高;-i:显示inode信... 查看详情
hands-on-data-analysis第二单元第四节数据可视化(代码片段)
hands-on-data-analysis第二单元第四节数据可视化文章目录hands-on-data-analysis第二单元第四节数据可视化1.简单绘图1.1.导入库1.2.基本的绘图示例1.3.子图示例1.4.子图绘图示例1.5.pyplot.subplots选项2.可视化展示泰坦尼克号数据集中男女中生... 查看详情
beego利用casbin进行权限管理——第四节策略更新(代码片段)
移步到这里近4个月没有更新这个系列。这个系列都是我粗浅的理解,其中我感觉有些的思路并非最优,并不合主流概念,因为我没去学习rbac之类的概念,仅供参考。特别是对于权限设计的处理方式,casbin是尽量用它自己的查询... 查看详情
《python多人游戏项目实战》第四节实现房间功能(代码片段)
目录4.1确定同一聊天室玩家及房主4.2 绘制开始或准备按钮4.3 实现按钮功能4.4完整代码下载地址:在本节,我们会在原有的程序基础上加上房间的功能。当玩家打开游戏窗口后,会自动出现在1号或者2号聊天室。只有... 查看详情
《buildozer打包实战指南》第四节正式打包一个apk文件(代码片段)
目录4.1了解buildozer.spec配置文件中的常用参数4.2 修改配置文件打包apk在上一节内容中,我们配置好了打包环境,还顺带成功打包出了一个apk文件(读者可以把这个apk安装到手机上运行)。不过在打包这个apk前... 查看详情
java网络编程-第四节:tcp流套接字(serversocket)编程(代码片段)
文章目录一:Java流套接字通信模型二:相关API详解(1)ServerSocket(2)Socket三:TCP通信示例一:客户端发送什么服务端就返回什么(1)代码(2)效果展示(3)分析四: 查看详情