Fabric開發(三) Ubuntu20.04.1快速搭建Fabric1.4.3 (排雷版)
上篇我們已經成功啟動了Fabric1.0.0網路並測試成功,但是1.0.0確實有點久遠了,還是跟著那個大佬的指令碼來啟動一把1.4.3試試。操作如下:
1、先切換分支到1.4.3 執行下載Fabric映象指令碼
因為上篇文章我們刪除了已經下載的指令碼,所以在切換到1.4.3分支之後,需要重新下載映象,這裡也提供了一鍵下載的命令。
切換到scripts
目錄 並執行指令碼bootstrap.sh
cd ~/go/src/github.com/hyperledger/fabric/scripts
./bootstrap.sh
1.執行之後報錯:
報錯原因:
nexus.hyperledger.org這個網站不再維護了,需要把指令碼中nexus.hyperledger.org位置替換一下
解決方案:
執行vim bootstrap.sh
,搜尋nexus.hyperledger.org ,進行修改
#改造前:
binariesInstall() {
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries"
binaryDownload ${BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
fi
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary"
binaryDownload ${CA_BINARY_FILE} https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
echo
fi
}
#改造後:
binariesInstall() {
echo "===> Downloading version ${FABRIC_TAG} platform specific fabric binaries" binaryDownload ${BINARY_FILE} https://github.com/hyperledger/fabric/releases/org/hyperledger/fabric/hyperledger-fabric/${ARCH}-${VERSION}/${BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${FABRIC_TAG} platform specific fabric binary is not available to download <----"
echo
fi
echo "===> Downloading version ${CA_TAG} platform specific fabric-ca-client binary" binaryDownload ${CA_BINARY_FILE} https://github.com/hyperledger/fabric/releases/org/hyperledger/fabric-ca/hyperledger-fabric-ca/${ARCH}-${CA_VERSION}/${CA_BINARY_FILE}
if [ $? -eq 22 ]; then
echo
echo "------> ${CA_TAG} fabric-ca-client binary is not available to download (Available from 1.1.0-rc1) <----"
echo
fi
}
再次執行./bootstrap.sh
,
halfape@halfape-VirtualBox:~/go/src/github.com/hyperledger/fabric/scripts$ ./bootstrap.sh
發現可以正常下載映象檔案了。
2、建立channel
切換到first-network
目錄
cd fabric-samples/first-network/
建立第一個 channel(mychannel為通道名稱,不寫預設為 mychannel,可以自己定義):
./byfn.sh -m generate -c mychannel
又報錯:
網上給出答案:
在啟動fabric中first-network網路時,需要執行一個自動化指令碼:
./byfn.sh -m generate
該指令碼需要自動生成相關證書資訊,fabric官方提供了兩款工具:configtxgen、cryptogen。在指令碼執行中會從fabric-simple/bin中取查詢並呼叫兩者。初次啟動時沒有這個工具的。
解決方法:
進入fabric目錄,看見make* 檔案,使用make configtxgen、make cryptogen兩個指令生成工具(如果之前搭建過fabric-1.0環境,直接進fabric/build將bin資料夾直接移動到fabric-sample目錄即可)。生成後的檔案再fabric/build/bin裡面,移動到相關位置即可。
操作如下:
我天,不知道貼上面解決方案的那個大佬 是不是真就那麼解決檔案了。我一頓好找,才發現build
原來是隱藏檔案
。。我簡直奔潰,網上的方案都試了一遍,都不行。不過總體一個思路是對的,那就是
該指令碼需要自動生成相關證書資訊,fabric官方提供了兩款工具:configtxgen、cryptogen。在指令碼執行中會從fabric-simple/bin中取查詢並呼叫兩者。初次啟動時沒有這個工具的。
.
所以:
cd ~/go/src/github.com/hyperledger/fabric/.build
sudo cp ./bin/* ../scripts/fabric-samples/bin/
然後再次執行:
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network
./byfn.sh -m generate -c mychannel
可。可。可。 終於成功了。
halfape@halfape-VirtualBox:~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network$ ./byfn.sh -m generate -c mychannel
Generating certs and genesis block for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' seconds
Continue? [Y/n] y
proceeding ...
/home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/../bin/cryptogen
##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
+ cryptogen generate --config=./crypto-config.yaml
org1.example.com
org2.example.com
+ res=0
+ set +x
Generate CCP files for Org1 and Org2
/home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/../bin/configtxgen
##########################################################
######### Generating Orderer Genesis block ##############
##########################################################
CONSENSUS_TYPE=solo
+ '[' solo == solo ']'
+ configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
2020-09-24 18:50:53.179 CST [common.tools.configtxgen] main -> INFO 001 Loading configuration
2020-09-24 18:50:53.301 CST [common.tools.configtxgen.localconfig] completeInitialization -> INFO 002 orderer type: solo
2020-09-24 18:50:53.301 CST [common.tools.configtxgen.localconfig] Load -> INFO 003 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:53.427 CST [common.tools.configtxgen.localconfig] completeInitialization -> INFO 004 orderer type: solo
2020-09-24 18:50:53.427 CST [common.tools.configtxgen.localconfig] LoadTopLevel -> INFO 005 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:53.428 CST [common.tools.configtxgen] doOutputBlock -> INFO 006 Generating genesis block
2020-09-24 18:50:53.429 CST [common.tools.configtxgen] doOutputBlock -> INFO 007 Writing genesis block
+ res=0
+ set +x
#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
+ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
2020-09-24 18:50:53.467 CST [common.tools.configtxgen] main -> INFO 001 Loading configuration
2020-09-24 18:50:53.590 CST [common.tools.configtxgen.localconfig] Load -> INFO 002 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:53.738 CST [common.tools.configtxgen.localconfig] completeInitialization -> INFO 003 orderer type: solo
2020-09-24 18:50:53.738 CST [common.tools.configtxgen.localconfig] LoadTopLevel -> INFO 004 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:53.738 CST [common.tools.configtxgen] doOutputChannelCreateTx -> INFO 005 Generating new channel configtx
2020-09-24 18:50:53.740 CST [common.tools.configtxgen] doOutputChannelCreateTx -> INFO 006 Writing new channel tx
+ res=0
+ set +x
#################################################################
####### Generating anchor peer update for Org1MSP ##########
#################################################################
+ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
2020-09-24 18:50:53.777 CST [common.tools.configtxgen] main -> INFO 001 Loading configuration
2020-09-24 18:50:53.901 CST [common.tools.configtxgen.localconfig] Load -> INFO 002 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:54.029 CST [common.tools.configtxgen.localconfig] completeInitialization -> INFO 003 orderer type: solo
2020-09-24 18:50:54.029 CST [common.tools.configtxgen.localconfig] LoadTopLevel -> INFO 004 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:54.029 CST [common.tools.configtxgen] doOutputAnchorPeersUpdate -> INFO 005 Generating anchor peer update
2020-09-24 18:50:54.029 CST [common.tools.configtxgen] doOutputAnchorPeersUpdate -> INFO 006 Writing anchor peer update
+ res=0
+ set +x
#################################################################
####### Generating anchor peer update for Org2MSP ##########
#################################################################
+ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
2020-09-24 18:50:54.067 CST [common.tools.configtxgen] main -> INFO 001 Loading configuration
2020-09-24 18:50:54.195 CST [common.tools.configtxgen.localconfig] Load -> INFO 002 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:54.321 CST [common.tools.configtxgen.localconfig] completeInitialization -> INFO 003 orderer type: solo
2020-09-24 18:50:54.321 CST [common.tools.configtxgen.localconfig] LoadTopLevel -> INFO 004 Loaded configuration: /home/halfape/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/configtx.yaml
2020-09-24 18:50:54.321 CST [common.tools.configtxgen] doOutputAnchorPeersUpdate -> INFO 005 Generating anchor peer update
2020-09-24 18:50:54.321 CST [common.tools.configtxgen] doOutputAnchorPeersUpdate -> INFO 006 Writing anchor peer update
+ res=0
+ set +x
halfape@halfape-VirtualBox:~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network$
3、first-network 的啟動
指定通道名,啟動網路:
./byfn.sh -m up -c mychannel
成功的話,會有大大的start和end哦,至於中間報了命令未找到,也很納悶
halfape@halfape-VirtualBox:~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network$ ./byfn.sh -m up -c mychannel
Starting for channel 'mychannel' with CLI timeout of '10' seconds and CLI delay of '3' seconds
Continue? [Y/n] y
proceeding ...
./byfn.sh: line 124: configtxlator: command not found
LOCAL_VERSION=
DOCKER_IMAGE_VERSION=1.4.3
=================== WARNING ===================
Local fabric binaries and docker images are
out of sync. This may cause problems.
===============================================
Creating network "net_byfn" with the default driver
Creating volume "net_peer0.org2.example.com" with default driver
Creating volume "net_peer1.org2.example.com" with default driver
Creating volume "net_peer1.org1.example.com" with default driver
Creating volume "net_peer0.org1.example.com" with default driver
Creating volume "net_orderer.example.com" with default driver
Creating peer0.org1.example.com ...
Creating peer1.org2.example.com ...
Creating peer1.org1.example.com ...
Creating peer0.org1.example.com
Creating orderer.example.com ...
Creating peer0.org2.example.com ...
Creating orderer.example.com
Creating peer1.org2.example.com
Creating peer1.org1.example.com
Creating orderer.example.com ... done
Creating cli ...
Creating cli ... done
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3e21e1b30504 hyperledger/fabric-tools:latest "/bin/bash" 4 seconds ago Up 2 seconds cli
59db1504493a hyperledger/fabric-peer:latest "peer node start" 10 seconds ago Up 4 seconds 0.0.0.0:9051->9051/tcp peer0.org2.example.com
d159d2a1ea36 hyperledger/fabric-orderer:latest "orderer" 10 seconds ago Up 4 seconds 0.0.0.0:7050->7050/tcp orderer.example.com
6d43e8708a68 hyperledger/fabric-peer:latest "peer node start" 10 seconds ago Up 4 seconds 0.0.0.0:10051->10051/tcp peer1.org2.example.com
604251517f0c hyperledger/fabric-peer:latest "peer node start" 10 seconds ago Up 4 seconds 0.0.0.0:8051->8051/tcp peer1.org1.example.com
604b3b0157dc hyperledger/fabric-peer:latest "peer node start" 10 seconds ago Up 4 seconds 0.0.0.0:7051->7051/tcp peer0.org1.example.com
____ _____ _ ____ _____
/ ___| |_ _| / \ | _ \ |_ _|
\___ \ | | / _ \ | |_) | | |
___) | | | / ___ \ | _ < | |
|____/ |_| /_/ \_\ |_| \_\ |_|
Build your first network (BYFN) end-to-end test
Channel name : mychannel
Creating channel...
+ peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
+ res=0
+ set +x
2020-09-24 11:02:38.037 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:38.099 UTC [cli.common] readBlock -> INFO 002 Received block: 0
===================== Channel 'mychannel' created =====================
Having all peers join the channel...
+ peer channel join -b mychannel.block
+ res=0
+ set +x
2020-09-24 11:02:38.257 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:38.383 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
===================== peer0.org1 joined channel 'mychannel' =====================
+ peer channel join -b mychannel.block
+ res=0
+ set +x
2020-09-24 11:02:41.526 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:41.597 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
===================== peer1.org1 joined channel 'mychannel' =====================
+ peer channel join -b mychannel.block
+ res=0
+ set +x
2020-09-24 11:02:44.740 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:44.820 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
===================== peer0.org2 joined channel 'mychannel' =====================
+ peer channel join -b mychannel.block
+ res=0
+ set +x
2020-09-24 11:02:47.928 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:47.988 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
===================== peer1.org2 joined channel 'mychannel' =====================
Updating anchor peers for org1...
+ peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
+ res=0
+ set +x
2020-09-24 11:02:51.069 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:51.118 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update
===================== Anchor peers updated for org 'Org1MSP' on channel 'mychannel' =====================
Updating anchor peers for org2...
+ peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
+ res=0
+ set +x
2020-09-24 11:02:54.203 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2020-09-24 11:02:54.217 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update
===================== Anchor peers updated for org 'Org2MSP' on channel 'mychannel' =====================
Installing chaincode on peer0.org1...
+ peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/
+ res=0
+ set +x
2020-09-24 11:02:57.325 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-09-24 11:02:57.325 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2020-09-24 11:02:58.911 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
===================== Chaincode is installed on peer0.org1 =====================
Install chaincode on peer0.org2...
+ peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/
+ res=0
+ set +x
2020-09-24 11:02:59.045 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-09-24 11:02:59.045 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2020-09-24 11:02:59.249 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
===================== Chaincode is installed on peer0.org2 =====================
Instantiating chaincode on peer0.org2...
+ peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'
+ res=0
+ set +x
2020-09-24 11:02:59.332 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-09-24 11:02:59.332 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
===================== Chaincode is instantiated on peer0.org2 on channel 'mychannel' =====================
Querying chaincode on peer0.org1...
===================== Querying on peer0.org1 on channel 'mychannel'... =====================
Attempting to Query peer0.org1 ...3 secs
+ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
+ res=0
+ set +x
100
===================== Query successful on peer0.org1 on channel 'mychannel' =====================
Sending invoke transaction on peer0.org1 peer0.org2...
+ peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
+ res=0
+ set +x
2020-09-24 11:04:10.235 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200
===================== Invoke transaction successful on peer0.org1 peer0.org2 on channel 'mychannel' =====================
Installing chaincode on peer1.org2...
+ peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/
+ res=0
+ set +x
2020-09-24 11:04:10.365 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-09-24 11:04:10.365 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2020-09-24 11:04:11.184 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
===================== Chaincode is installed on peer1.org2 =====================
Querying chaincode on peer1.org2...
===================== Querying on peer1.org2 on channel 'mychannel'... =====================
Attempting to Query peer1.org2 ...3 secs
+ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
^[OQ+ res=0
+ set +x
90
===================== Query successful on peer1.org2 on channel 'mychannel' =====================
========= All GOOD, BYFN execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
4、客戶端操作
進入 cli容器
docker exec -it cli bash
查詢a的餘額
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
顯示正常,結果為90
查詢b的餘額,為210
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
a 向 b 轉賬 20 並查詢各自的餘額:
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","20"]}'
執行後,檢視a和b的結果,a應當是70,b應當是230
Bingo,完全正確。至此,Fabric V1.0.0
和Fabric V1.4.3
環境都完美搞好了。
4、first-network的關閉
關閉網路:
./byfn.sh -m down
執行 docker ps -a 可以看到 容器情況:
cuijb@cuijb-VirtualBox:~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b609b3d98436 dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab "chaincode -peer.add…" 41 minutes ago Up 41 minutes dev-peer1.org2.example.com-mycc-1.0
f24c5f7fdf6b dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 "chaincode -peer.add…" 42 minutes ago Up 42 minutes dev-peer0.org1.example.com-mycc-1.0
eb1dbb4a9269 dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b "chaincode -peer.add…" 42 minutes ago Up 42 minutes dev-peer0.org2.example.com-mycc-1.0
bad91d6708e9 hyperledger/fabric-tools:latest "/bin/bash" 44 minutes ago Up 43 minutes cli
fde805cdd9a9 hyperledger/fabric-orderer:latest "orderer" 44 minutes ago Up 44 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
6d65447fb84c hyperledger/fabric-peer:latest "peer node start" 44 minutes ago Up 44 minutes 0.0.0.0:9051->9051/tcp peer0.org2.example.com
56b7e58f1374 hyperledger/fabric-peer:latest "peer node start" 44 minutes ago Up 44 minutes 0.0.0.0:7051->7051/tcp peer0.org1.example.com
fb03d8e4dd2f hyperledger/fabric-peer:latest "peer node start" 44 minutes ago Up 44 minutes 0.0.0.0:10051->10051/tcp peer1.org2.example.com
96b66a7d468b hyperledger/fabric-peer:latest "peer node start" 44 minutes ago Up 44 minutes 0.0.0.0:8051->8051/tcp peer1.org1.example.com
5、注意事項
若上次啟動網路後沒有關閉,下次啟動網路之前一定要先執行 ./byfn.sh -m down
然後再次啟動網路,只需執行./byfn.sh -m up -c myfirstchannel
即可。
再次,關閉所有 docker 容器的命令(如果用得到的話):
docker rm -f $(docker ps -aq)
參考文章
https://blog.csdn.net/jambeau/article/details/103712408
https://blog.csdn.net/wwqcherry/article/details/107009909
https://www.pianshen.com/article/38761096450/
寫在最後
感謝網上眾多大佬的案例,我才得以成功搭建。如果你覺得這篇文章對你有所幫助,關注微信公眾號半路猿
,拉你進我們的學習交流群,一起學習,一同成長。
相關文章
- Fabric Dev開發除錯模式的搭建過程dev除錯模式
- linux搭建FabricLinux
- 在Ubantu16.04下Hyperledger fabric開發環境的搭建開發環境
- Linux磁碟空間佔滿問題快速排雷Linux
- Laradock 快速搭建PHP開發環境PHP開發環境
- Hyperledger Fabric 手動搭建【區塊鏈學習三】區塊鏈
- 搭建Hyperledger Fabric 2.3.2開發環境及簡單案例執行開發環境
- vue cli快速搭建Vue開發環境Vue開發環境
- (WSL) Ubuntu 快速搭建 PHP 開發環境UbuntuPHP開發環境
- React基礎——快速搭建開發環境React開發環境
- 快速搭建本地docker的開發環境Docker開發環境
- Hyperledger Fabric 超級賬本 java開發區塊鏈環境搭建Java區塊鏈
- Hyperledger Fabric 智慧合約開發及 fabric-sdk-go/fabric-gateway 使用示例GoGateway
- 基於c++的排雷小遊戲二次開發C++遊戲
- 基於Debian搭建Hyperledger Fabric 2.4開發環境及執行簡單案例開發環境
- webpack4 x 快速搭建vue開發環境WebVue開發環境
- 如何快速搭建微服務開發測試環境微服務
- 開發者如何快速搭建自己的電商App?APP
- 從賬戶搭建到投放排雷,Apple Search Ads全攻略APP
- 還在從零開始搭建專案?這款升級版快速開發腳手架值得一試!
- 筆記-Flutter開發環境搭建Mac版筆記Flutter開發環境Mac
- 五分鐘用 Docker 快速搭建 Go 開發環境DockerGo開發環境
- centos8中快速搭建Java Web開發環境CentOSJavaWeb開發環境
- CentOS7搭建Fabric-1.2CentOS
- 快速開始api開發(三)第一個介面-註冊API
- 快速定位無用路由 媽媽再也不用擔心人工排雷了路由
- 區塊鏈開發Hyperledger Fabric入門區塊鏈
- ODOO二開—windows開發環境搭建(13版本)OdooWindows開發環境
- 兩分鐘帶你快速搭建Flutter開發環境(Mac)Flutter開發環境Mac
- 搭建一個快速、優雅的 Laravel 的開發環境Laravel開發環境
- LeaRun快速開發平臺:自由搭建個性化門戶
- 三方USDT支付通道系統搭建開發
- Hyperledger Fabric 2.x 環境搭建
- 使用AndroidX + ViewModel + LiveData + DataBinding等元件搭建的MVVM快速開發框架AndroidViewLiveData元件MVVM框架
- Mac版最詳細的Flutter開發環境搭建MacFlutter開發環境
- 使用 Docker 快速搭建單機版的 Kubernetes 叢集Docker
- python三大神器之fabricPython
- M1版Mac從零開始搭建Golang開發環境MacGolang開發環境