web-dev-qa-db-ja.com

既存のデータを失うことなくファブリックを再起動する方法composer?

私は地元で「carauction-network」の例を試しました。しかし、「startFabric.sh」ファイルを使用してネットワークを開始すると、この古いデータが失われるため、Couch DBが削除され、再びCouchDBが作成されます。データをクリーンアップせずにファブリックサーバーを起動する方法を提案してください。

8

fabric-dev-servers(以前のfabric-tools)の下のstartFabric.shは、Fabricを起動するだけでなく、既存のFabricコンテナを削除し、Dockerイメージから新しいコンテナを再作成します。これによる影響は、ファブリックからすべてのデータとビジネスネットワークが失われることです。 PeerAdmin @ hlfv1を除くすべてのビジネスネットワークカードは使用できなくなりました。

ファブリックを作成した後でファブリックを停止および開始する場合は、ビジネスネットワークとデータを保持するために、次のコマンドに従います。

  • docker-compose.ymlファイルがあるディレクトリに移動します(例:/home/<user>/fabric-tools/fabric-scripts/hlfv1/composer
  • docker-compose stopを実行して、ファブリックコンテナをトップにします
  • docker-compose startを実行して、中断したところから再開します。

Docker-composeコマンドを使用する前に、正しいフォルダーにあることが必要です。

バージョンアップデート

Composer v0.20.x(Fabric 1.2の場合)では、フォルダーの名前/バージョンが変更されました。

/home/<user>/fabric-dev-servers/fabric-scripts/hlfv12/composer

Composer v0.19.x(以前のFabric v1.1の場合)では、フォルダーの名前/バージョンが変更されました。

/home/<user>/fabric-dev-servers/fabric-scripts/hlfv11/composer

20
R Thatcher

Rサッチャーのソリューションを拡張するために、bashシェルにアクセスできる場合は、このスクリプトをfabric-dev-serverフォルダーに配置できます。データを失うことなく、上記の手順のようにネットワークを再起動します。正しいディレクトリにcdして、docker-composestopとdocker-composestartを実行するだけです。また、再起動後にこれを実行してネットワークを元に戻すこともできます。

#!/bin/bash
cd ./fabric-scripts/hlfv1/composer
docker-compose stop
docker-compose start

些細なことのようで、議論にあまり追加しませんが、時間を節約できます。

5
Ben Hayward

以下のようにfabric-dev-server/fabric-scripts/hlfv11内のstartFabric.shを編集します

#!/bin/bash

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
# http://www.Apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Exit on first error, print all commands.
set -e

Usage() {
    echo ""
    echo "Usage: ./startFabric.sh [-d || --dev]"
    echo ""
    echo "Options:"
    echo -e "\t-d or --dev: (Optional) enable fabric development mode"
    echo ""
    echo "Example: ./startFabric.sh"
    echo ""
    exit 1
}

Parse_Arguments() {
    while [ $# -gt 0 ]; do
        case $1 in
            --help)
                HELPINFO=true
                ;;
            --dev | -d)
                FABRIC_DEV_MODE=true
                ;;
        esac
        shift
    done
}

Parse_Arguments $@

if [ "${HELPINFO}" == "true" ]; then
    Usage
fi

#Detect architecture
Arch=`uname -m`

# Grab the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ "${FABRIC_DEV_MODE}" == "true" ]; then
    DOCKER_FILE="${DIR}"/composer/docker-compose-dev.yml
else
    DOCKER_FILE="${DIR}"/composer/docker-compose.yml
fi

Arch=$Arch docker-compose -f "${DOCKER_FILE}" stop
Arch=$Arch docker-compose -f "${DOCKER_FILE}" up -d

# wait for Hyperledger Fabric to start
# incase of errors when running later commands, issue export FABRIC_START_TIMEOUT=<larger number>
echo "sleeping for ${FABRIC_START_TIMEOUT} seconds to wait for fabric to complete start up"
sleep ${FABRIC_START_TIMEOUT}

# Create the channel
#docker exec peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c composerchannel -f /etc/hyperledger/configtx/composer-channel.tx

# Join peer0.org1.example.com to the channel.
#docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org1.example.com peer channel join -b composerchannel.block

if [ "${FABRIC_DEV_MODE}" == "true" ]; then
    echo "Fabric Network started in chaincode development mode"
fi
5
Sudip Ghosh