LoginSignup
3
2

More than 3 years have passed since last update.

[Hyperledger Fabric]ローカルでチェーンコードがupgradeされない

Last updated at Posted at 2019-09-19

Upgradeコマンドが完了しているのになぜかChaincodeがアップグレードされてない・・・

FabcarネットワークのHyperledger Fabricを使ってローカル環境で開発してたら少しハマりました。

いつもどおりpeerのupgradeコマンドでアップグレードして、完了しました。


docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" \ 
-e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" \
cli peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n test -l "node" -v 1.1 -c '{"Args":[""]}' 


Get instantiated chaincodes on channel mychannel:
Name: test, Version: 1.1, Path: /usr/local/src, Escc: escc, Vscc: vscc

でもチェーンコードを呼び出してみても、変化していない・・・
というかもっと昔のバージョンになっている気がする・・・

ネットワークを再度立ち上げてみても変わらず。
どこかでキャッシュでもされているのかと思い、探ってみると、

Dockerイメージが大量に残ってる!

今までにデプロイしたチェーンコードのDockerイメージがすべて残ってました。
なるほど、チェーンコードをデプロイすると

・Dockerイメージを作成
   ↓
・イメージを元にコンテナを作成
   ↓
・新たにできたコンテナにピアのコンテナが向いて新しいバージョンのチェーンコードが呼べるようになる

って感じなんですね。たぶん。

それぞれのDockerイメージの名前は
dev-{Peerの名前}-{チェーンコードの名前}-{バージョン番号}-{UUID}
みたいな感じになっていたのですが、
デプロイ時にPeerの名前、チェーンコード名、バージョン番号が同じイメージがあると、
新たにイメージを作るのではなく、既存のイメージを使用してコンテナを建てるという挙動なんだとおもいます。

だから昔のバージョンのチェーンコードになってたんですね。

とりあえずいらないイメージを全部削除
dev-peer0.~
という名前のイメージだったので

docker rmi $(docker images | grep dev-peer)

これでまたチェーンコードをデプロイしてみるとちゃんとアップグレードされていました!

ネットワーク自体を落としてもイメージは残るのでこんなことになっていたわけですね。
ちゃんとネットワークを落とすときに自動で消すようにします。

でもチェーンコード名とバージョン番号でコンテナのイメージを決めてるんだったら最後のUUIDいらないのでは・・・

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2