Node Inspector使用问题:Docker部署下3000端口占用报错排查
问题分析与解决
你遇到的EADDRINUSE错误,核心原因是端口冲突:
- 你的npm脚本里,
nodemon的--inspect=0.0.0.0:3000是把Node.js的调试监听端口设为了3000 - 而你的
server.js代码里,应该也在监听3000端口提供服务 - 容器内这两个监听操作(调试器+服务本身)抢占同一个3000端口,就会触发地址被占用的错误
解决步骤
1. 分离调试端口与服务端口
修改npm脚本,把调试端口换成Node.js默认的9229(或其他未被占用的端口),比如:
"watch": "nodemon --inspect=0.0.0.0:9229 --legacy-watch server.js"
如果需要远程调试你的Node服务,在docker-compose.yaml的ports里添加调试端口映射:
ports: - "3000:3000" - "9229:9229"
不需要调试的话,甚至可以直接去掉--inspect参数。
2. 确认服务监听配置
检查server.js里的监听代码,确保它使用的端口(比如3000)和调试端口完全不重复,比如:
// server.js 示例 app.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); });
3. 排查容器内端口占用(可选)
如果上述方法没解决,可以进入容器查看3000端口的占用情况:
# 进入运行中的容器 docker exec -it <容器ID或名称> /bin/bash # 查看端口占用 lsof -i :3000 # 或者用netstat netstat -tulpn | grep 3000
内容的提问来源于stack exchange,提问作者deagleshot
相关产品推荐
相关产品推荐

