Я использую матрицу Hyperledger с числом n пиров, каждый на своей виртуальной машине. У VM0 есть peer0, заказчик и CA. VM1 имеет peer1, VM2 имеет peer2 и так далее. После того, как все контейнеры Docker работают, канал создается, каждый узел присоединяется к каналу, цепной код устанавливается и создается через peer0, а затем устанавливается на всех других узлах.
# Stop existing containers and bring up the network
docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.yml up -d
# Create the channel
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
# Join peer0.org1.example.com to the channel.
docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel fetch config -o orderer.example.com:7050 -c mychannel
docker exec -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel_config.block
# Install and instantiate chaincode through CLI container
docker exec -e "CORE_PEER_ADDRESS=peer0.org1.example.com:7051" cli peer chaincode install -n exp2 -p github.com/exp2/go -v 1.0
docker exec -e "CORE_PEER_ADDRESS=peer0.org1.example.com:7051" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n exp2 -v 1.0 -c '{"Args":[""]}' -P "AND('Org1MSP.member')"
sleep 5
docker exec -e "CORE_PEER_ADDRESS=peer0.org1.example.com:7051" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n exp2 -c '{"function":"initLedger","Args":[""]}'
При текущей настройке мне нужно запускать аналогичный сценарий отдельно на каждой виртуальной машине, чтобы партнер подключился к каналу и установил цепной код. Есть ли способ просто запустить один скрипт с VM0 и завершить настройку на других виртуальных машинах. Можем ли мы вызвать Docker-контейнер удаленно и выполнить команду docker exec
удаленно на всех других виртуальных машинах?