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

时间:2019-04-15 11:51:39

标签: azure docker azure-devops azure-web-sites azure-web-app-service

如果我的节点应用程序使用启动脚本"start": "pm2 start server.js"

,我的App Service Linux实例崩溃。
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.

容器日志只包含上述错误。如果我只使用:"start": "node server.js",,则应用程序启动正常。

我了解到,如果容器无法通过8080响应,则容器将停止运行,但是我将process.env.PORT设置为服务器的端口,所以我不知道为什么pm2启动脚本会崩溃容器。

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

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

4 个答案:

答案 0 :(得分:0)

我们是否要对PORT 8080进行ping操作?这里的问题是端口8080没有暴露,因此当我们尝试对容器执行ping操作时,我们并未对容器正在侦听的端口执行ping操作。

有两种解决方法。

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

您可以参考以下提到的文章:

https://docs.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/

答案 1 :(得分:0)

尝试将应用程序设置PORT添加到应用程序正在侦听的任何端口的值。

参考:https://github.com/MicrosoftDocs/azure-docs/issues/34451

答案 2 :(得分:0)

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

const port = process.env.port || 8080;

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

答案 3 :(得分:0)

我在为容器部署 Rails 应用程序到 Azure Web 应用程序时遇到了这个问题

当我将应用程序部署到 Azure 时,我会收到以下错误:

2021-07-29T10:29:05.571Z INFO  - Initiating warmup request to container devopsapptest_0_2eeeb139 for site devopsapptest
2021-07-29T10:29:07.733Z ERROR - Container devopsapptest_0_2eeeb139 for site devopsapptest has exited, failing site start
2021-07-29T10:29:07.737Z ERROR - Container devopsapptest_0_2eeeb139 didn't respond to HTTP pings on port: 80, failing site start. See container logs for debugging.

我是这样解决的

默认情况下,应用服务假定您的自定义容器正在侦听端口 80,但是,我的应用程序正在侦听端口 3000 上的请求,这导致了错误。

如果您的容器侦听不同的端口,请在您的应用服务应用中设置 WEBSITES_PORT 应用设置。这是一个 WEBSITES_PORT 作为您的应用程序设置之一,带有您的应用程序正在侦听的端口。就我而言,它是 3000

您可以在 Azure CLI 中进行设置:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000

在 Azure PowerShell 中:

Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}

注意:应用服务目前只允许您的容器为 HTTP 请求公开一个端口。

您可能还希望将 EXPOSE your-port 命令添加到项目的 Dockerfile。但是,对于我的项目,我不必添加 EXPOSE your-port 命令,它对我来说效果很好。

资源Configure a custom container for Azure App Service

仅此而已。

我希望这会有所帮助