Azure App Service部署Node.js(PM2)应用遇8080端口健康检查失败问题
解决Azure App Service中PM2部署Node.js应用8080端口健康检查失败问题
第一步:先排查容器日志
- 登录Azure门户,进入目标App Service,左侧菜单找日志->容器日志,重点看端口绑定、PM2配置、应用启动相关的报错信息。
- 也可以用Azure CLI拉取实时日志:
az webapp log tail --name <你的AppService名称> --resource-group <资源组名称>
第二步:确认Node.js应用的端口绑定
- 必须让应用监听0.0.0.0:8080,不能只绑定localhost——容器内的localhost仅对内生效,外部探测访问不到。示例代码:
const express = require('express'); const app = express(); const port = process.env.PORT || 8080; // 优先用Azure提供的PORT环境变量 app.get('/', (req, res) => { res.send('OK'); }); app.listen(port, '0.0.0.0', () => { // 绑定0.0.0.0 console.log(`App running on port ${port}`); });
第三步:检查PM2配置是否正确
- 用PM2配置文件(如ecosystem.config.js)的话,要确保启动命令和端口配置无误:
module.exports = { apps: [{ name: "stockmgmt", script: "./server.js", // 你的应用入口文件路径 instances: "max", env: { NODE_ENV: "production", PORT: 8080 } }] }; - 启动命令里别乱指定其他端口,避免覆盖配置。
第四步:验证健康检查路径
- Azure默认健康检查路径是
/,如果你的应用根路径不返回200状态码,会直接导致探测失败。可以去App Service的配置->常规设置里,把健康检查路径改成你应用实际可用的端点(比如/health),同时确保该端点能返回200 OK。
第五步:检查容器启动命令
- 在App Service配置->常规设置里,启动命令要用容器适配的PM2 runtime模式,比如:
别用普通的pm2-runtime start ecosystem.config.js --env productionpm2 start,pm2-runtime会保持前台运行,防止容器意外退出。
第六步:测试容器内部端口连通性
- 如果前面都没问题,通过SSH进容器排查:
- 左侧菜单开发工具->SSH进入容器终端;
- 检查端口是否监听:
输出里有netstat -tulpn | grep 80800.0.0.0:8080才算绑定正确; - 本地测试访问:
如果能正常返回内容,说明应用本身没问题,问题可能出在Azure网络或健康检查的额外配置上。curl http://localhost:8080
内容的提问来源于stack exchange,提问作者gokul dotech
相关产品推荐
相关产品推荐

