我们将利用docker-compose脚本来启动我们的区块链网络,并用之前生成的创世块来引导orderer。
在之前的示例中,我们使用的是docker-compose-cli.yaml来启动网络,为了详细了解每个节点和其配置的意义,我们分拆成多个yaml分别启动来看。
在first-network文件夹下创建yaml文件,我们将把自己写的所有的yaml文件放在里面。
CA
首先是CA的配置文件docker-compose-ca.yaml:
version:'2'
networks:
byfn:
services:
ca1:
image:hyperledger/fabric-ca
environment:
-FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
-FABRIC_CA_SERVER_CA_NAME=ca-org1
-FABRIC_CA_SERVER_TLS_ENABLED=${ENABLE_TLS}
-FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
-FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/e5ac2c775a1785aab2314e9a37903b546094990c7b23843fd58aaa323246b4a1_sk
ports:
-"7054:7054"
command:sh-c'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/e5ac2c775a1785aab2314e9a37903b546094990c7b23843fd58aaa323246b4a1_sk -b admin:adminpw -d'
volumes:
-../crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
network_mode:host
container_name:ca_peerOrg1
networks:
-byfn
ca2:
image:hyperledger/fabric-ca
environment:
-FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
-FABRIC_CA_SERVER_CA_NAME=ca-org2
-FABRIC_CA_SERVER_TLS_ENABLED=${ENABLE_TLS}
-FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem
-FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/478b238f352735a9e7454af1180f633cee8c50bfe2513510d8f38970b89c7ecc_sk
ports:
-"8054:7054"
command:sh-c'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/478b238f352735a9e7454af1180f633cee8c50bfe2513510d8f38970b89c7ecc_sk -b admin:adminpw -d'
volumes:
-../crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
network_mode:host
container_name:ca_peerOrg2
networks:
-byfn
我们创建了2个ca容器,端口分别为本机的7054和8054,每个ca对应不同的org组织。
需要注意的是,这里volumes是挂载的外部路径,这个路径一定要写对,因为配置文件是在yaml文件夹中,所以需要../,和command中的私钥文件名也要替换成你自己本机路径下的名字。
command命令是ca服务器启动之后的初始化命令,传入参数包含了证书、私钥等配置,还有admin用户的用户名和密码,如果要修改ca的admin密码,要对应修改这个地方。
启动网路:
>$ CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=60ENABLE_TLS=true docker-compose-f yaml/docker-compose-ca.yaml up-d
Creatingnetwork"net_default"with the default driver
Recreatingca_peerOrg2...
Recreatingca_peerOrg1...
Recreatingca_peerOrg1
Recreatingca_peerOrg2...done
查看下docker容器是否两个ca节点都启动了:
>$ docker ps-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a23424f40e9hyperledger/fabric-ca"sh -c 'fabric-ca-..."39seconds agoUp53seconds0.0.0.0:8054->7054/tcp ca_peerOrg2
a1db6e04d736 hyperledger/fabric-ca"sh -c 'fabric-ca-..."39seconds agoUp54seconds0.0.0.0:7054->7054/tcp ca_peerOrg1
现在我们可以进入ca1容器,看看他里面都有些什么东西:
>$ docker exec-it ca_peerOrg1/bin/bash
>$ cd/etc/hyperledger/fabric-ca-server
>ls
ca-cert.pem ca-key.pem fabric-ca-server-config.yaml fabric-ca-server.db msp
有一些根证书和私钥,yaml文件里包含了ca节点的初始化配置,db是ca验证需要存储的一些账号信息。
Orderer
创建docker-compose-base.yaml文件:
version:'2'
services:
orderer0.example.com:
hostname:orderer0
domainname:example.com
container_name:orderer0.example.com
image:hyperledger/fabric-orderer
environment:
-ORDERER_GENERAL_LOGLEVEL=ERROR
-ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
-ORDERER_GENERAL_GENESISMETHOD=file
-ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
-ORDERER_GENERAL_LOCALMSPID=OrdererMSP
-ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
# enabled TLS
-ORDERER_KAFKA_RETRY_PERIOD=3s
-ORDERER_KAFKA_RETRY_STOP=10s
-ORDERER_KAFKA_VERBOSE=true
-ORDERER_GENERAL_TLS_ENABLED=${ENABLE_TLS}
-ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
-ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
-ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
working_dir:/opt/gopath/src/github.com/hyperledger/fabric
command:/bin/bash-c'sleep 10 && orderer'
volumes:
-../channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
-../crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/var/hyperledger/orderer/msp
-../crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/var/hyperledger/orderer/tls
ports:
-7050:7050
orderer1.example.com:
hostname:orderer1.example.com
container_name:orderer1.example.com
image:hyperledger/fabric-orderer
environment:
-ORDERER_GENERAL_LOGLEVEL=ERROR
-ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
-ORDERER_GENERAL_GENESISMETHOD=file
-ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
-ORDERER_GENERAL_LOCALMSPID=OrdererMSP
-ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
-ORDERER_KAFKA_RETRY_PERIOD=3s
-ORDERER_KAFKA_RETRY_STOP=10s
# enabled TLS
-ORDERER_KAFKA_VERBOSE=true
-ORDERER_GENERAL_TLS_ENABLED=${ENABLE_TLS}
-ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
-ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
-ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
working_dir:/opt/gopath/src/github.com/hyperledger/fabric
command:/bin/bash-c'sleep 10 && orderer'
volumes:
-../channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
-../crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/var/hyperledger/orderer/msp
-../crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/var/hyperledger/orderer/tls
ports:
-8050:7050
orderer2.example.com:
hostname:orderer2.example.com
container_name:orderer2.example.com
image:hyperledger/fabric-orderer
environment:
-ORDERER_GENERAL_LOGLEVEL=ERROR
-ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
-ORDERER_GENERAL_GENESISMETHOD=file
-ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
-ORDERER_GENERAL_LOCALMSPID=OrdererMSP
-ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
# enabled TLS
-ORDERER_KAFKA_RETRY_PERIOD=3s
-ORDERER_KAFKA_RETRY_STOP=10s
-ORDERER_KAFKA_VERBOSE=true
-ORDERER_GENERAL_TLS_ENABLED=${ENABLE_TLS}
-ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
-ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
-ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
working_dir:/opt/gopath/src/github.com/hyperledger/fabric
command:/bin/bash-c'sleep 10 && orderer'
volumes:
-../channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
-../crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp
-../crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls
ports:
-9050:7050
创建docker-compose-orderer.yaml文件:
version:'2'
networks:
byfn:
services:
orderer0.example.com:
extends:
file:docker-compose-base.yaml
service:orderer0.example.com
container_name:orderer0.example.com
depends_on:
-kafka0
networks:
-byfn
orderer1.example.com:
extends:
file:docker-compose-base.yaml
service:orderer1.example.com
container_name:orderer1.example.com
depends_on:
-kafka0
networks:
-byfn
orderer2.example.com:
extends:
file:docker-compose-base.yaml
service:orderer2.example.com
container_name:orderer2.example.com
depends_on:
-kafka0
networks:
-byfn
启动Orderer:
>$ CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=60ENABLE_TLS=true docker-compose-f yaml/docker-compose-orderer.yaml up-d
Creatingorderer0.example.com...
Creatingorderer1.example.com...
Creatingorderer2.example.com...done
再看看容器,没有问题,ca,orderer都成功启动:
>$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6e078efdbc8 hyperledger/fabric-orderer"/bin/bash -c 'sle..."50seconds agoUpAbouta minute0.0.0.0:8050->7050/tcp orderer1.example.com
0d455f0d6062hyperledger/fabric-orderer"/bin/bash -c 'sle..."50seconds agoUpAbouta minute0.0.0.0:9050->7050/tcp orderer2.example.com
4245900f68f8hyperledger/fabric-orderer"/bin/bash -c 'sle..."Aboutan hour agoUpAboutan hour0.0.0.0:7050->7050/tcp orderer0.example.com
Peer
在docker-compose-base.yaml文件中追加peer节点的配置:
peer-base:
image:hyperledger/fabric-peer
environment:
-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
-CORE_LOGGING_LEVEL=DEBUG
-CORE_PEER_TLS_ENABLED=${ENABLE_TLS}
-CORE_PEER_ENDORSER_ENABLED=true
-CORE_PEER_GOSSIP_USELEADERELECTION=true
-CORE_PEER_GOSSIP_ORGLEADER=false
-CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
-CORE_PEER_PROFILE_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
working_dir:/opt/gopath/src/github.com/hyperledger/fabric/peer
command:bash-c'sleep 20 && peer node start --peer-defaultchain=false'
peer0.org1.example.com:
hostname:peer0.org1.example.com
container_name:peer0.org1.example.com
extends:
service:peer-base
environment:
-CORE_PEER_ID=peer0.org1.example.com
-CORE_PEER_ADDRESS=peer0.org1.example.com:7051
-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
-CORE_PEER_LOCALMSPID=Org1MSP
volumes:
-/var/run/:/host/var/run/
-../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
-../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
ports:
-7051:7051
-7053:7053
peer1.org1.example.com:
container_name:peer1.org1.example.com
extends:
service:peer-base
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_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
-CORE_PEER_LOCALMSPID=Org1MSP
volumes:
-/var/run/:/host/var/run/
-../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
-../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
ports:
-8051:7051
-8053:7053
peer0.org2.example.com:
container_name:peer0.org2.example.com
extends:
service:peer-base
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_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
-CORE_PEER_LOCALMSPID=Org2MSP
volumes:
-/var/run/:/host/var/run/
-../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
-../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
ports:
-9051:7051
-9053:7053
peer1.org2.example.com:
container_name:peer1.org2.example.com
extends:
service:peer-base
environment:
-CORE_PEER_ID=peer1.org2.example.com
-CORE_PEER_ADDRESS=peer1.org2.example.com:7051
-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
-CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
-CORE_PEER_LOCALMSPID=Org2MSP
volumes:
-/var/run/:/host/var/run/
-../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
-../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
ports:
-10051:7051
-10053:7053
创建docker-compose-peer.yaml:
version:'2'
networks:
-byfn
services:
couchdb0:
container_name:couchdb0
image:hyperledger/fabric-couchdb
ports:
-"5984:5984"
networks:
-byfn
peer0.org1.example.com:
extends:
file:docker-compose-base.yaml
service:peer0.org1.example.com
environment:
-CORE_LEDGER_STATE_STATEDATABASE=CouchDB
-CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
depends_on:
-couchdb0
networks:
-byfn
couchdb1:
container_name:couchdb1
image:hyperledger/fabric-couchdb
ports:
-"6984:5984"
networks:
-byfn
peer1.org1.example.com:
extends:
file:docker-compose-base.yaml
service:peer1.org1.example.com
environment:
-CORE_LEDGER_STATE_STATEDATABASE=CouchDB
-CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
depends_on:
-couchdb1
networks:
-byfn
couchdb2:
container_name:couchdb2
image:hyperledger/fabric-couchdb
ports:
-"7984:5984"
networks:
-byfn
peer0.org2.example.com:
extends:
file:docker-compose-base.yaml
service:peer0.org2.example.com
environment:
-CORE_LEDGER_STATE_STATEDATABASE=CouchDB
-CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
depends_on:
-couchdb2
networks:
-byfn
couchdb3:
container_name:couchdb3
image:hyperledger/fabric-couchdb
ports:
-"8984:5984"
networks:
-byfn
peer1.org2.example.com:
extends:
file:docker-compose-base.yaml
service:peer1.org2.example.com
environment:
-CORE_LEDGER_STATE_STATEDATABASE=CouchDB
-CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984
depends_on:
-couchdb3
networks:
-byfn
启动Peer节点:
>$ CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=60ENABLE_TLS=true docker-compose-f yaml/docker-compose-peer.yaml up-d
Creatingcouchdb3...
Creatingcouchdb1...
Creatingcouchdb0...
Creatingcouchdb2...
Creatingcouchdb3
Creatingcouchdb1
Creatingcouchdb2
Creatingcouchdb3...done
Creatingpeer1.org2.example.com...
Creatingcouchdb1...done
Creatingpeer1.org1.example.com...
Creatingcouchdb2...done
Creatingcouchdb0...done
Creatingpeer1.org1.example.com...done
Creatingpeer0.org1.example.com...
Creatingpeer0.org2.example.com...done
查看容器状态:
>$ docker ps-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
749acf8eebf8hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:7051->7051/tcp,0.0.0.0:7053->7053/tcp peer0.org1.example.com
8689b9152000hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUp45minutes0.0.0.0:9051->7051/tcp,0.0.0.0:9053->7053/tcp peer0.org2.example.com
b16444eac623 hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:8051->7051/tcp,0.0.0.0:8053->7053/tcp peer1.org1.example.com
f29ac84f381d hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:10051->7051/tcp,0.0.0.0:10053->7053/tcp peer1.org2.example.com
Cli节点
我们还需要创建一个Cli客户端容器节点,方便对区块链执行一些操作。
创建文件:docker-compose-cli.yaml:
version:'2'
networks:
byfn:
services:
cli:
container_name:cli
image:hyperledger/fabric-tools
tty:true
network_mode:host
environment:
-GOPATH=/opt/gopath
-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
-CORE_LOGGING_LEVEL=DEBUG
-CORE_PEER_ID=cli
-CORE_PEER_ADDRESS=peer0.org1.example.com:7051
-CORE_PEER_LOCALMSPID=Org1MSP
-CORE_PEER_TLS_ENABLED=${ENABLE_TLS}
-CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
-CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
-CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
-CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
working_dir:/opt/gopath/src/github.com/hyperledger/fabric/peer
command:bash-c'sleep 30000000000000000000000'
volumes:
-/var/run/:/host/var/run/
-../../chaincode/:/opt/gopath/src/github.com/chaincode
-../crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
-../scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
-../channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
networks:
-byfn
查看容器:
>$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6e078efdbc8 hyperledger/fabric-orderer"/bin/bash -c 'sle..."50seconds agoUpAbouta minute0.0.0.0:8050->7050/tcp orderer1.example.com
0d455f0d6062hyperledger/fabric-orderer"/bin/bash -c 'sle..."50seconds agoUpAbouta minute0.0.0.0:9050->7050/tcp orderer2.example.com
27f3688beec8hyperledger/fabric-tools"bash -c 'sleep 30..."15minutes agoUp16minutes cli
749acf8eebf8hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:7051->7051/tcp,0.0.0.0:7053->7053/tcp peer0.org1.example.com
8689b9152000hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUp45minutes0.0.0.0:9051->7051/tcp,0.0.0.0:9053->7053/tcp peer0.org2.example.com
b16444eac623 hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:8051->7051/tcp,0.0.0.0:8053->7053/tcp peer1.org1.example.com
f29ac84f381d hyperledger/fabric-peer"bash -c 'sleep 20..."45minutes agoUpAboutan hour0.0.0.0:10051->7051/tcp,0.0.0.0:10053->7053/tcp peer1.org2.example.com
32f849c44e0fhyperledger/fabric-couchdb"tini -- /docker-e..."45minutes agoUpAboutan hour4369/tcp,9100/tcp,0.0.0.0:6984->5984/tcp couchdb1
02b770dfd4edhyperledger/fabric-couchdb"tini -- /docker-e..."45minutes agoUpAboutan hour4369/tcp,9100/tcp,0.0.0.0:5984->5984/tcp couchdb0
f0c72c40c793 hyperledger/fabric-couchdb"tini -- /docker-e..."45minutes agoUpAboutan hour4369/tcp,9100/tcp,0.0.0.0:8984->5984/tcp couchdb3
2eb63e7efa08hyperledger/fabric-couchdb"tini -- /docker-e..."45minutes agoUpAboutan hour4369/tcp,9100/tcp,0.0.0.0:7984->5984/tcp couchdb2
4245900f68f8hyperledger/fabric-orderer"/bin/bash -c 'sle..."Aboutan hour agoUpAboutan hour0.0.0.0:7050->7050/tcp orderer0.example.com
faf06e00031a hyperledger/fabric-ca"sh -c 'fabric-ca-..."Aboutan hour agoUpAboutan hour0.0.0.0:8054->7054/tcp ca_peerOrg2
496e8e0a7df6hyperledger/fabric-ca"sh -c 'fabric-ca-..."Aboutan hour agoUpAboutan hour0.0.0.0:7054->7054/tcp ca_peerOrg1
总结
到此,我们已经成功启动了网络中的所有节点,下一章将会在这些节点中运行我们的区块链~
领取专属 10元无门槛券
私享最新 技术干货