如果我的节点应用正在使用启动脚本,我的应用服务 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.
容器日志只有上述错误。如果我只使用:"start": "node server.js",
应用程序启动正常。
我知道如果容器没有通过 8080 响应,容器就会停止,但我process.env.PORT
设置为服务器的端口,所以我无法弄清楚为什么 pm2 启动脚本使容器崩溃。
我有一种感觉,如果使用上面的启动脚本,process.env.PORT
是未定义的,因为过程中有些混淆,但找不到任何方法来调试它,因为在容器崩溃后我无法再 ssh 进入它来检查它。
我们是否正在尝试在端口 8080 上执行 ping 操作?这里的问题是端口 8080 没有公开,所以当我们尝试 ping 容器时,我们不会在容器正在侦听的端口上 ping 。
有几种方法可以解决此问题。
- 使用 Dockerfile 中的 EXPOSE 指令公开端口 8080。
- 使用值为"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/
我遇到了同样的问题。当我将服务器.js文件中的代码更改为下面的代码时,它成功运行:
const port = process.env.port || 8080;
重新部署到 Azure 后,它现在可以工作了。
尝试添加应用程序设置 PORT,其中包含应用正在侦听的任何端口的值。
参考: https://github.com/MicrosoftDocs/azure-docs/issues/34451
我在处理将 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
命令,它对我来说效果很好。
注意:在此更改之后,最好再次从 CICD 管道重新部署应用程序以刷新应用程序。
资源:为 Azure 应用服务配置自定义容器。
可能您的应用程序需要一些时间来响应,Azure Web 服务上的 docker 容器等待 230 秒才能获得回复,如果超过该时间限制,它将简单地停止并给出"容器没有响应 HTTP ping...",可以通过在 Azure 应用服务中的"配置"边栏选项卡下更改应用程序设置来增加此时间限制,方法是添加 WEBSITES_CONTAINER_START_TIME_LIMIT 到 420(根据需要)。
有这个问题。如果没有任何帮助,请确保 Web 应用针对未实现的 API 终结点返回"未找到 (404)"响应。
由服务器故障的答案提供: https://serverfault.com/questions/1003418/azure-docker-app-error-site-did-not-start-within-expected-time-limit-and-co