fabric鏈碼實例化失敗排查:安裝成功卻提示“chaincode registration failed: container exited with 0”
本文分析并解決了一個Fabric鏈碼實例化失敗的問題。問題現象:官方demo鏈碼安裝成功,但實例化時報錯“chaincode registration failed: container exited with 0”,init方法僅返回錯誤字符串。
鏈碼代碼片段:
func (t *simplechaincode) init(stub shim.chaincodestubinterface) pb.response { return shim.error("hello") }
安裝與實例化命令:
# 安裝鏈碼 peer chaincode install -n mycca -v 1.0 -p chaincode/ # 實例化鏈碼 peer chaincode instantiate -o orderer0.adminnodborderer:7050 --tls --cafile /etc/hyperledger/crypto-config/ordererorganizations/adminnodborderer/orderers/orderer0.adminnodborderer/msp/tlscacerts/tlsca.adminnodborderer-cert.pem -c myc -n mycca -v 1.0 -c '{"args":["init"]}'
安裝成功,但實例化失敗,返回500錯誤碼。 經排查,問題源于docker服務的DNS配置。
解決方案: 修改/lib/systemd/system/docker.service文件,在ExecStart參數后添加DNS配置,確保Docker容器能正確解析域名。
-
編輯/lib/systemd/system/docker.service文件:
sudo vim /lib/systemd/system/docker.service
-
在ExecStart參數后添加以下DNS配置:
--dns=10.96.0.10 --dns=192.168.0.1 --dns-search default.svc.cluster.local --dns-search svc.cluster.local --dns-opt ndots:2 --dns-opt timeout:2 --dns-opt attempts:2
其中10.96.0.10為kube-dns IP地址,192.168.0.1為宿主機DNS地址。 kubernetes集群環境下,需在每個worker節點執行此操作。
-
重啟Docker服務:
sudo systemctl daemon-reload && sudo systemctl restart docker
通過以上步驟,即可解決鏈碼實例化失敗的問題。 請根據實際環境調整DNS地址。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END