各位在搭建Besu的时候相信也会碰到过各种各样的问题,我这边总结了其中几个最最常见的供大家参详,希望能够帮助到各位。

Q1:

在Besu节点通过Docker Swarm与其他节点交互时抛出异常(已经确认了Docker网络正常)

Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 92.168.1.164:2377: connect: no route to host"

A1:

按照网上的说法这是因为系统防火墙引起的,尝试关闭宿主机防火墙即可解决这个问题

systemctl stop firewalld.service
systemctl disable firewalld.service

Q2:

在重启Docker后抛出异常

docker: Error response from daemon: error creating external connectivity network: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i docker_gwbridge -j RETURN: iptables: No chain/target/match by that name.
(exit status 1)).

A2:

如果在启动docker service时网关是关闭的状态,那么docker就不会操作网关配置(chain docker)。再之后网关若重新启动,会导致docker network无法对新container进行网络配置也就是没有网管的操作权限,因此需要做重启处理。如下:

service docker restart 

Q3:

一开始学Docker Swarm的时候重复创建节点和加入节点抛出下面错误

Error response from daemon: rpc error: code = FailedPrecondition desc = network y2r9sn2ntcafv7uq7wema52vr is in use by task 9bhrcs4p8vtg9kuihd1djxhmi

A3:

# 先查看docker集群节点
docker node ls

# 释放节点
docker node update --availability drain y2qsyjdbfmm4tjwh4p9wqlmq1

# 删除节点
docker node rm y2qsyjdbfmm4tjwh4p9wqlmq1

Q4:

一开始学Docker Swarm的时候重复将节点加入集群抛出下面错误

Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.

A4:

# 先强制让节点脱离swarm模式
docker swarm leave --force

# 再使用join将节点加入到别的swarm网络
docker swarm join --token SWMTKN-1-0j7cpk5ipfx11duvittzm1ke0oamnzgy9mkjzoqyc53c1yi67y-bc7jsrpzxaqlrnducznt8x0qn 92.168.1.164:2377

Q5:

还是在Docker Swarm的网络问题,这个报错多出现在创建Besu的签署节点的时候出现“无法加入到网络”

docker: Error response from daemon: attaching to network failed, make sure your network options are correct and check manager logs: context deadline exceeded.

A5:

# 先将节点释放
docker node update --availability drain xxxx

#之后重新将节点激活
docker node update --availability active xxxx

按照以上操作仍然会存在大几率的错误重现(之前我就是将所有节点都脱离overlay网络后重新加入仍然会出现上述错误),因此建议在创建签署节点前先创建busybox容器并先加入到overlay网络,之后再做签署节点的创建。


Q6:

关于安装web3.js时会出现的各种问题,在这里我直接出一个指南让大家避一下坑。

A6:

# 先使用普通账号安装nodejs,一般来说CentOS通过yum安装会自动安装6.x版本的nodejs。
sudo yum install nodejs

# 接着就通过npm安装n(nodejs的管理工具,是为了后面升级nodejs使用的)
sudo npm i -g n

# 安装好n之后就通过n来对现有的nodejs进行升级,这里升级成lts版本
sudo n lts

# 升级lts后发现nodejs虽然已升级成功,但npm还是旧的版本。这时先不管这个直接通过npm装一个cnpm。
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org

# cnpm安装完毕后切换到目标目录采用以下命令安装web3.js
sudo cnpm install web3@1.3.0

# 为了生成package.json文件在目标目录下使用以下命令初始化项目目录,让其将编译包全部下载到本地。
sudo npm init

# 最后使用以下命令将当前目录转换成可执行目录后就可以使用web3.js了
sudo cnpm install -g web3@1.3.0 --save