使用FISCO BCOS区块链平台执行 build_chain.sh 脚本搭建本地链,执行命令报错:error p2p start port error...如何解决?
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
📌 特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。
欢迎订阅本专栏,一次订阅后,专栏内所有文章可永久免费阅读,后续更新内容皆不用再次订阅,持续更新中。
📢 问题描述
详细问题描述如下: 执行命令报错:error p2p start port error…完全不知道要怎么去修改?
报错截图如下:

全文目录:
📣 请知悉:如下方案不保证一定适配你的问题!
如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:
✅️ 问题理解
从如上截图可以看到,你正在使用 FISCO BCOS 区块链平台执行 build_chain.sh 脚本搭建本地链,执行命令为:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
报错信息:
[ERROR] p2p start port error. e.g: 30300
核心问题定位:

可能原因有以下几类:
-p参数格式不对:FISCO BCOS 的-p参数有严格格式要求,逗号分隔三个端口,分别是p2p端口,rpc端口,channel端口- p2p 端口(30300)已被占用
- 端口号超出合法范围(1~65535)
- build_chain.sh 脚本版本与参数格式不兼容
✅️ 问题解决方案
🟢 方案 A:检查并修正 -p 参数格式(最高概率根因)
FISCO BCOS build_chain.sh 的 -p 参数格式为:
-p <p2p_port>,<channel_port>,<jsonrpc_port>
⚠️ 注意:三个端口之间用英文逗号分隔,逗号前后不能有空格!
你的命令:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
逐一核查:
| 参数 | 你的值 | 说明 |
|---|---|---|
-l |
127.0.0.1:4 |
本机 IP,生成 4 个节点 ✅ |
-p |
30300,20200,8545 |
p2p=30300, channel=20200, jsonrpc=8545 |
格式本身看起来没问题,但请务必确认命令中没有多余空格或中文字符,建议完整复制下方命令重新执行:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
或者换一组端口试试(避免端口冲突):
bash build_chain.sh -l 127.0.0.1:4 -p 30310,20210,8555
🟢 方案 B:检查端口是否被占用(第二高概率)
p2p 端口 30300 可能已经被其他进程占用,执行以下命令检查:
# 检查 30300 端口占用情况
sudo lsof -i :30300
# 或
sudo netstat -tlnp | grep 30300
# 同时检查其他两个端口
sudo netstat -tlnp | grep 20200
sudo netstat -tlnp | grep 8545
如果有输出说明端口被占用,有两种处理方式:
方式一:Kill 占用进程
# 找到 PID 后 kill 掉
sudo kill -9 <PID>
方式二:换一组未被占用的端口
bash build_chain.sh -l 127.0.0.1:4 -p 30320,20220,8560
🟢 方案 C:检查是否有残留的旧节点目录(极常见!)
如果之前已经运行过 build_chain.sh,当前目录下可能已存在 nodes/ 目录,导致端口冲突或脚本判断异常。
# 查看当前目录
ls -la ~/fisco/
# 如果存在 nodes 目录,先停止旧节点再清理
cd ~/fisco/nodes/127.0.0.1
bash stop_all.sh
# 返回 fisco 目录,删除旧的 nodes 目录
cd ~/fisco
rm -rf nodes/
# 重新执行建链命令
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
💡 这是新手最常踩的坑!旧节点没停就重新建链,各种报错 😅
🟡 方案 D:检查 build_chain.sh 脚本版本与完整性
不同版本的 FISCO BCOS,build_chain.sh 参数格式略有差异。
# 查看脚本版本信息
bash build_chain.sh -h
# 或
head -50 build_chain.sh | grep -i version
如果脚本损坏或版本过旧,重新下载:
# FISCO BCOS 2.x 版本
curl -#LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.9.1/build_chain.sh
chmod +x build_chain.sh
# 或使用国内镜像(推荐,速度快)
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.9.1/build_chain.sh
chmod +x build_chain.sh
重新下载后再执行建链命令。
🟡 方案 E:使用 FISCO BCOS 3.x 的正确命令格式
如果你用的是 FISCO BCOS 3.x,build_chain.sh 的参数格式有所变化:
# FISCO BCOS 3.x 建链命令
bash build_chain.sh -l "127.0.0.1:4" -p 30300
# 3.x 版本 -p 只需要指定 p2p 起始端口,其他端口自动分配!
# channel port = p2p_port + 1000 = 31300
# jsonrpc port = p2p_port + 2000 = 32300
⚠️ 2.x 和 3.x 的
-p参数格式完全不同,混用必报错!
确认你的版本:
bash build_chain.sh -h | head -20
🔴 方案 F:完整重置环境,从头建链(终极方案)
如果以上都不行,彻底清理环境重来:
# 第一步:停止所有 FISCO 节点
cd ~/fisco
if [ -d "nodes" ]; then
bash nodes/127.0.0.1/stop_all.sh 2>/dev/null
fi
# 第二步:清理旧文件
rm -rf nodes/ fisco-bcos
# 第三步:重新下载 build_chain.sh(使用国内源)
curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.9.1/build_chain.sh
chmod +x build_chain.sh
# 第四步:下载二进制(如果没有的话)
bash build_chain.sh -h # 查看是否需要 -e 指定二进制路径
# 第五步:重新建链(换一组干净端口)
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -v 2.9.1
✅️ 问题延伸
1. FISCO BCOS 端口规划说明
当 -l 127.0.0.1:4 创建 4 个节点时,端口自动递增:
| 节点 | p2p 端口 | channel 端口 | jsonrpc 端口 |
|---|---|---|---|
| node0 | 30300 | 20200 | 8545 |
| node1 | 30301 | 20201 | 8546 |
| node2 | 30302 | 20202 | 8547 |
| node3 | 30303 | 20203 | 8548 |
💡 所以你需要确保 3030030303**、**2020020203、8545~8548 这 12 个端口全部空闲!
2. VMware 虚拟机中的特殊注意事项
从截图看你使用的是 VMware 虚拟机,需额外注意:
- 虚拟机防火墙可能拦截端口,执行:
sudo ufw disable # 临时关闭防火墙测试
# 或开放端口
sudo ufw allow 30300:30310/tcp
- 确保用的是 127.0.0.1(本地回环),不是虚拟机的 NAT 地址
✅️ 问题预测
| 解决当前问题后可能遇到的问题 | 原因 | 预防措施 |
|---|---|---|
| 节点启动后无法共识/出块 | genesis.json 配置错误 | 使用脚本生成的默认配置 |
| 控制台连接节点失败 | channel 端口配置错误 | 检查 config.ini 中的 channel_listen_port |
| 重启虚拟机后节点停止 | 没有设置开机自启 | 添加 systemd 服务或手动 start_all.sh |
| 多机部署时节点无法互连 | 防火墙或 IP 配置错误 | 用真实 IP 替代 127.0.0.1 |
控制台报 Failed to connect |
SDK 与节点版本不匹配 | 使用对应版本的 console |
✅️ 小结
🎯 快速排查三步走:

最可能的修复命令(直接试这个):
# 停止旧节点、清理目录、换端口重建
cd ~/fisco
rm -rf nodes/
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
别急,FISCO BCOS 环境搭建这关每个人都会卡,过了这关后面就顺了!
🌹 结语 & 互动说明
希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径。
若你按文中步骤执行后仍未解决:
- 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
- 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
- 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀
💡 如果你有更优或更通用的解法:
- 非常欢迎在评论区分享你的实践经验或改进方案;
- 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
- 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环
🧧 文末福利:技术成长加速包 🧧
文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。
若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。
如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。
如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏👉《全栈 Bug 调优(实战版)》👈️
这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。
✍️ 如果这篇文章对你有一点点帮助:
- 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
- 你的支持,是我持续输出高质量实战内容的最大动力。
同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」:
获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,通通免费领取。
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。
🫵 Who am I?
我是 bug菌:
- 热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
- CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40;
- 掘金、InfoQ、51CTO 等平台签约及优质作者;
- 全网粉丝累计 30w+。
更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看 👈️
硬核技术公众号 「猿圈奇妙屋」 期待你的加入,一起进阶、一起打怪升级。
- End -
更多推荐


所有评论(0)