Configuré Hyperledger Fabric V0.6 con una imagen acoplable. Escribí un programa de código de cadena pequeña y realicé algunas operaciones. Los datos se almacenan y obtienen a pedido de la cadena de bloques Hyperledger.
Reinicio mi programa de código de cadena y los datos aún persisten. Por supuesto, este debería ser el comportamiento esperado.
Pero cuando detengo mi tejido Hyperledger con el comando docker-compose down y lo vuelvo a iniciar con docker-compose start y luego inicio mi programa chaincode, descubrí que todos los datos que se escribieron antes del reinicio se han ido. No pude encontrar ningún dato en mi cadena de bloques.
¿Cómo puedo evitar este comportamiento de Hyperledger? Lo estoy ejecutando en un solo par/nodo. Con varios pares, si uno de los pares se reinicia, los datos/transacciones de otros pares se copian en él. Pero considere el peor de los escenarios cuando todos los compañeros caen. ¿Significa eso que perdemos todos nuestros datos?
Según los documentos oficiales docker-compose down
detiene y elimina todos los contenedores enumerados en el archivo docker-compose junto con sus volúmenes (a menos que se especifique como externo, eche un vistazo a la documentación).
Es posible que desee detener los contenedores con docker-compose stop
; de esta manera, después docker-compose up
, se conservarán sus datos.
Si se desea la persistencia de datos en el contenedor del mismo nivel o en el contenedor de CouchDB, una opción es montar un directorio en el docker-host en un directorio relevante en el contenedor. Por ejemplo, puede agregar las siguientes dos líneas en la especificación del contenedor del mismo nivel en el archivo docker-compose-base.yaml
:
volumes: - /var/hyperledger/peer0:/var/hyperledger/production
Para el contenedor de CouchDB, puede agregar las siguientes dos líneas en la especificación del contenedor de CouchDB:
volumes: - /var/hyperledger/couchdb0:/opt/couchdb/data