Linux 上的 Azure Web 应用程序:“错误:容器未响应端口 8080 上的 HTTP ping” - 使用时:“start”:“pm2 start server.js”

Edm*_*mas 8 azure docker azure-web-app-service azure-devops

如果我的节点应用程序使用启动脚本,我的应用服务 Linux 实例会崩溃"start": "pm2 start server.js"

2019-04-15 11:36:34.432 ERROR - Container crime-digest__6ea5_0 for site crime-digest__6ea5 has exited, failing site start
2019-04-15 11:36:34.489 ERROR - Container crime-digest__6ea5_0 didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging.
Run Code Online (Sandbox Code Playgroud)

容器日志只有上述错误。如果我只使用:"start": "node server.js",应用程序启动得很好。

我知道如果容器没有通过 8080 响应,则容器会停止,但我已将其process.env.PORT设置为服务器的端口,因此我无法弄清楚为什么 pm2 启动脚本会使容器崩溃。

process.env.PORT如果使用上面的启动脚本,我有一种不确定的感觉,因为在过程中有些混淆,但找不到任何调试它的方法,因为在容器崩溃后,我无法再通过 ssh 进入它来检查它。

我真的很感激任何建议,谢谢。

小智 8

我们是否尝试 ping 端口 8080?这里的问题是端口 8080 没有公开,因此当我们尝试 ping 容器时,我们不会 ping 容器正在侦听的端口。

有几种方法可以解决这个问题。

  1. 使用 Dockerfile 中的 EXPOSE 指令公开端口 8080。
  2. 使用值为“8080”的 WEBSITES_PORT 应用程序设置来公开该端口。

您可以参考以下文章:

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app-deployment?view=azure-devops

https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/

  • 我们可以禁用 ping 过程吗? (6认同)

小智 4

我也有同样的问题。当我将 server.js 文件中的代码更改为以下代码时,它成功运行:

const port = process.env.port || 8080;
Run Code Online (Sandbox Code Playgroud)

重新部署到 Azure 后,它现在可以工作了。

  • 我知道这已经快两年了,但今天它帮助我解决了我的问题,谢谢! (2认同)