Linux 上的 Azure Web 应用:"Error: Container didn't respond to HTTP pings on port: 8080" - 使用时:"start":"



如果我的节点应用正在使用启动脚本,我的应用服务 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 。

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

  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/

我遇到了同样的问题。当我将服务器.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

最新更新