Ubuntu20.04下Bun运行Express Server无法绑定端口求助
Ubuntu 20.04用Bun跑Express服务器端口绑定失败?试试这些方案
先查Bun版本兼容性
Ubuntu 20.04自带的glibc是2.31,版本偏老,而Bun部分新版本对glibc要求更高,可能直接导致底层网络调用异常。
- 执行
bun --version查看当前版本,试试降级到对旧系统更友好的版本,比如bun install bun@1.0.10 - 降级后删除旧依赖重新安装:
rm -rf node_modules bun.lockb && bun install
检查Express与Bun的适配细节
Bun对Express的兼容并非完全无缝,部分配置或依赖可能触发端口绑定问题:
- 查看代码里
app.listen的参数,别用默认的localhost,显式指定0.0.0.0试试:app.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); }); - 项目里如果有
body-parser这类中间件,先临时移除非核心中间件,逐步排查是否是某类中间件与Bun冲突
系统级网络限制别漏了
就算关闭了防火墙,Ubuntu 20.04可能还有其他网络限制:
- 检查
apparmor是否限制了进程,执行sudo aa-status查看状态,若相关进程被限制,临时禁用测试:sudo systemctl stop apparmor - 查看系统端口范围,执行
sysctl net.ipv4.ip_local_port_range,确保目标端口在范围内;如果需要使用1024以下的端口,给Bun添加权限:sudo setcap 'cap_net_bind_service=+ep' $(which bun)
用Bun原生服务验证端口可用性
Bun用的是自研网络栈,和Node.js不同,先跳过Express验证端口能否正常绑定:
- 写个简单的Bun原生服务测试:
如果这个测试能正常运行,说明问题出在Express与Bun的兼容层,试试把Express升级到最新版本:import { serve } from "bun"; serve({ port: 3000, fetch(req) { return new Response("Hello from Bun!"); }, });bun add express@latest
内容的提问来源于stack exchange,提问作者Akhil
相关产品推荐
相关产品推荐

