😱 开篇暴击:明明配置是对的,为什么连不上?!
兄弟们,今天真的被 OpenClaw 搞破防了。
事情是这样的:我在 Mac mini 上跑了个 OpenClaw 的 Agent,本机 localhost:29876 访问丝滑无比,WebUI 界面美滋滋。想着躺沙发上用 MacBook Air 远程调戏一下 AI,结果输入 http://192.168.3.28:29876……
Connection Refused。
我当时就懵了。
第一反应:防火墙?查了,关着的。
第二反应:IP 输错了?查了,没错。
第三反应:配置文件写错了?打开 openclaw.json 一看:
"gateway": {
"bind": "lan", // 这里明明写着 lan 啊!
"port": 29876
}
官方文档说 bind: "lan" 就是监听 0.0.0.0,也就是允许局域网访问。配置没毛病,网络没毛病,但它就是死活连不上!
那一刻,我感觉我的智商受到了侮辱。🤬
🕵️♂️ 抽丝剥茧:谁在搞鬼?
既然配置是对的,那肯定是实际运行状态出了问题。
我祭出了大杀器 lsof,想看看 29876 端口到底是谁在用,监听在哪个 IP 上。
lsof -i :29876
结果显示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2236 sisuad 16u IPv4 0x3665... 0t0 TCP localhost:29876 (LISTEN)
破案了!
注意看最后一行:localhost:29876 (LISTEN)。
这意味着这个进程(PID 2236)只监听了本地回环地址 (127.0.0.1),根本没有监听 0.0.0.0!
真相只有一个:
这个 PID 2236 是一个僵尸进程!它可能是我之前测试时启动的,当时用的配置是默认的 loopback。后来我虽然改了配置文件为 lan,但这个老进程一直没死,占着茅坑不拉屎,新配置根本没生效!
✨ 高光时刻:一行命令教做人
既然找到了“内鬼”,解决办法就简单粗暴了:杀掉它,重启!
1. 处决僵尸进程 🧟♂️
kill -9 2236
(注意:你的 PID 可能不一样,用 lsof 查出来的那个)
2. 满血复活 🚀
重新启动 OpenClaw Gateway,这次它会乖乖读取新的配置文件:
nohup node openclaw.mjs gateway run > /tmp/openclaw.log 2>&1 &
3. 见证奇迹
再次检查端口状态:
lsof -i :29876
输出变成了:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2950 sisuad 15u IPv4 0x3665... 0t0 TCP *:29876 (LISTEN)
看到那个 *:29876 了吗?这就代表它监听了所有接口(0.0.0.0)!
回到 MacBook Air,刷新页面…… 通了! 🎉🎉🎉
📝 避坑指南:血泪总结
- 不要盲目信配置:配置文件写对了,不代表程序当前运行的状态就是对的。
- 端口被占是常态:Node.js 开发经常遇到进程没退干净的情况,
lsof -i :端口号是永远的神。 - 重启大法好:遇到这种玄学问题,先杀进程重启,能解决 90% 的问题。
- 绑定地址要看清:
127.0.0.1(localhost) = 只能本机玩。0.0.0.0(*) = 局域网大家一起玩。
希望这篇踩坑实录能帮到同样在深夜怀疑人生的你!如果觉得有用,点个赞再走呗~ 😉