Fabric区块链浏览器启动报错Error : [ 'Explorer is closing due to channel name [%s] is already exist in DB'...]
Fabric区块链浏览器启动报错
[ERROR] Sync - Error : [ 'Channel name [%s] already exist in DB , Kindly re-run the DB scripts to proceed',
'*****' ]
Error : [ 'Explorer is closing due to channel name [%s] is already exist in DB'...]
报错截图如下:
在用docker部署区块链浏览器的时候,出现这个错误,网上查找也没有任何相关的博文,反复检查后发现不是配置文件的问题,按照报错信息很容易想到应该是Explorer-db里面存在了脏数据。那么解决思路就很显然了,登录数据库,删除这个channel。
首先 docker ps 查询一下Explorer-db容器id
docker ps
第二步 进入容器
docker exec -it 05b3a3471f6f bash
第三步 登录数据库
使用 psql -U postgres 这条语句登录数据库,不需要输入数据库密码,注意U是大写的。
root@05b3a3471f6f:/# psql -U postgres
第四步 查看数据库列表
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
----------------+----------+----------+------------+------------+-----------------------
fabricexplorer | hppoc | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
第五步 进入fabricexplorer 数据库里面
postgres=# \c fabricexplorer #\c表示选择数据库
fabricexplorer=# \d #\d表示展示数据库中的表信息
List of relations
Schema | Name | Type | Owner
--------+---------------------------+----------+-------
public | blocks | table | hppoc
public | blocks_id_seq | sequence | hppoc
public | chaincodes | table | hppoc
public | chaincodes_id_seq | sequence | hppoc
public | channel | table | hppoc
public | channel_id_seq | sequence | hppoc
public | orderer | table | hppoc
public | orderer_id_seq | sequence | hppoc
public | peer | table | hppoc
public | peer_id_seq | sequence | hppoc
public | peer_ref_chaincode | table | hppoc
public | peer_ref_chaincode_id_seq | sequence | hppoc
public | peer_ref_channel | table | hppoc
public | peer_ref_channel_id_seq | sequence | hppoc
public | transactions | table | hppoc
public | transactions_id_seq | sequence | hppoc
public | users | table | hppoc
public | users_id_seq | sequence | hppoc
public | write_lock | table | hppoc
public | write_lock_write_lock_seq | sequence | hppoc
(20 rows)
第六步 查询channel表信息
这个表有点宽大家可以复制到文本里面看
fabricexplorer=# select * from channel;
id | name | blocks | trans | createdt | channel_genesis_hash | channel_hash | channel_config | channel_block | channel_tx | channel_version | network_name
----+-------------+--------+-------+---------------------+------------------------------------------------------------------+--------------+----------------+---------------+------------+-----------------+--------------
3 | fab2-chan1 | 24 | 24 | 2021-01-12 05:43:52 | 951658b50465610dcb655a520d41c7eae796a4c5ab5f46cd6356c7730769e988 | | | | | | tbs_default
4 | testchannel | 2 | 2 | 2021-01-12 05:43:54 | 641f74e1cbc1e8fa274839d421987ffc578c504c28d891beeb3fa0d0c2b99637 | | | | | | tbs_default
5 | c-zrpmx5 | 7 | 7 | 2021-01-14 02:41:21 | 9234dd1c82201d1737f92c3a3b0eda3df41002d2d8c9d2334fcdf0a612df4b39 | | | | | | tbs_default
6 | c-3uaw9h | 0 | 0 | 2021-01-14 03:20:57 | dd336656a8ec7c5ae785fa837e2fb13d422071051062c1f07dc27ab23c4b8a2c | | | | | | tbs_default
(4 rows)
第七步 删除报错的channe
fabricexplorer=# delete from channel where name = 'testchannel';
DELETE 1
最后使用docker-compose重启区块链浏览器和区块链浏览器DB,你会发现它起来了。
总结:
这个错误网上都搜不到,可能是使用Fabric的人少,然后部署区块链浏览器的人就更少了,因此在这里记录一下,这个问题是之前部署过区块链服务和浏览器,环境没有清理干净,把区块链浏览器的DB所在的卷删除,然后重新部署区块链浏览器也能解决此问题,删掉后就启动成功了。