本地运行多Serverless应用(Serverless Offline)时3002端口占用异常问题咨询
解决serverless-offline启动时3002端口被占用的问题
这问题其实挺常见的——你只配置了HTTP服务的端口,但忽略了serverless-offline背后的Lambda运行时端口!
为什么会出现3002端口?
serverless-offline在运行时会启动两个核心服务:
- 一个是对外提供HTTP接口的服务,就是你配置的
httpPort(4000/3000) - 另一个是内部Lambda运行时服务器,用来处理函数的执行逻辑,这个端口默认是3002,如果你没在配置里指定,所有应用都会用这个默认值。
冲突的原因
当你启动第一个Serverless应用时,它不仅占用了你设置的HTTP端口(比如4000),还悄悄占用了默认的3002端口作为Lambda服务器的通信端口。等你启动第二个应用时,虽然HTTP端口设成了3000,但它还是会尝试用3002启动自己的Lambda服务器,这时候就会触发listen EADDRINUSE错误了。
解决方法:给每个应用配置独立的Lambda端口
只需要在每个应用的serverless.yml里,给serverless-offline加上lambdaPort配置,指定不同的端口即可:
第一个应用的配置:
custom: serverless-offline: httpPort: 4000 lambdaPort: 3002 # 可以保留默认值,或者改成其他不冲突的端口
第二个应用的配置:
custom: serverless-offline: httpPort: 3000 lambdaPort: 3003 # 选一个和第一个应用不一样的端口
这样两个应用的HTTP端口和内部Lambda端口都完全不冲突,就能同时本地运行了。
验证方法(可选)
如果你想确认确实是第一个应用占用了3002端口,可以用以下命令查看:
- Mac/Linux:
lsof -i :3002 - Windows:
netstat -ano | findstr :3002
执行后你会看到占用端口的进程就是第一个启动的serverless-offline实例。
内容的提问来源于stack exchange,提问作者Sugumar Venkatesan
相关产品推荐
相关产品推荐

