🏆本文收录于 《全栈 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

核心问题定位:

可能原因有以下几类:

  1. -p 参数格式不对:FISCO BCOS 的 -p 参数有严格格式要求,逗号分隔三个端口,分别是 p2p端口,rpc端口,channel端口
  2. p2p 端口(30300)已被占用
  3. 端口号超出合法范围(1~65535)
  4. 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.xbuild_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**、**20200202038545~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 -

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐