先說我踩得什麼坑吧
(重新編輯此博客,以前寫的太low)
- 配置文件詳解
- cli容器中執行遇到的錯誤
docker-compose-cli.yaml
詳解:
version: '2'
volumes: #聲明掛載的卷
orderer.example.com:
peer0.org1.example.com:
peer1.org1.example.com:
peer0.org2.example.com:
peer1.org2.example.com:
networks: #聲明一個名稱爲byfn的網絡
byfn:
services:
orderer.example.com: #定義一個名稱爲orderer.example.com的服務
extends: #擴展,代表需要加載的文件或服務 即使用了其中的配置信息
file: base/docker-compose-base.yaml
service: orderer.example.com
container_name: orderer.example.com #當前容器名稱
networks: #指定當前容器所加入的網絡,如果需要加入多個網絡,可以定義多個
- byfn
#以下同上
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org1.example.com
networks:
- byfn
peer1.org1.example.com:
container_name: peer1.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer1.org1.example.com
networks:
- byfn
peer0.org2.example.com:
container_name: peer0.org2.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org2.example.com
networks:
- byfn
peer1.org2.example.com:
container_name: peer1.org2.example.com
extends:
file: base/docker-compose-base.yaml
service: peer1.org2.example.com
networks:
- byfn
cli: #定義一個客戶端容器,方便與各節點進行交互
container_name: cli #客戶端容器名稱
image: hyperledger/fabric-tools:$IMAGE_TAG #該服務所依賴的鏡像
tty: true #使用僞終端
stdin_open: true #標準輸入
environment: #環境變量
- GOPATH=/opt/gopath #指定go的路徑
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
#- FABRIC_LOGGING_SPEC=DEBUG
- FABRIC_LOGGING_SPEC=INFO #日誌級別
- CORE_PEER_ID=cli #當前節點的Id
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 #以下與peer-base.yaml相同,表示當前客戶端容器默認與peer0.org1.example.com進行交互
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
- 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 #TLS-peer0.org1.example.com的證書路徑
- 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 #TLS-peer0.org1.example.com的密鑰路徑
- 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 #TLS-peer0.org1.example.com的根證書路徑
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp @#TLS-組織1中Admin的MSP路徑
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer #工作目錄,即進入容器所在的默認位置
command: /bin/bash #啓動容器後所運行的第一條命令:使用bash
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
depends_on: #依賴,需要首先按順序啓動以下容器,但是不會等待以下容器完全啓動才啓動當前容器
- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
networks: #指定當前容器所加入的網絡
- byfn
cli容器中遇到的錯誤:
1、InitCmd -> ERRO 001 Cannot run peer because cannot init crypto, specified path "/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" does not exist or cannot be accessed: stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp: no such file or directory
還未解決。。。。
2、Error: failed to create deliver client for orderer: orderer client failed to connect to orderer.example.com:7050: failed to create new connection: connection error: desc = "transport: error while dialing: dial tcp: lookup orderer.example.com on 127.0.0.11:53: no such host"
原因:
(1)之前搭建的網絡沒有清除乾淨,退出cli容器:exit
;清除網絡:./byfn.sh -m down
;重新啓動網絡進入cli
容器
(2)調出orderer節點的容器日誌:docker logs orderer.example.com
可以看出是kafka版本的設置問題(Kafka.Version unset, setting to 0.10.2.0
),至於kafka版本,如果不設置的默認的就是0.10.2.0
.爲什麼會出現這種情況,我也不是很清楚,大佬路過還請指教一二。。。。
解決方法就是去更改kafka的版本。kafka版本控制的文件是/fabric-samples/config/orderer.yaml