0

为什么WEBSITES_PORTPORTinMicrosoft.Web/sites被忽略,以及EXPOSEin .dockerfile

当健康检查失败时,我们的 docker 不断崩溃。对 HTTP ping 没有响应。

我们收到didn't respond to HTTP pings on port: 8080如下所示的消息:

在此处输入图像描述

解释

我们在同一个 Azure 应用服务计划上运行一个函数应用和一个 Web 应用,在 Nodejs 上完成。

Microsoft.Web/serverfarms使用基本 B2 计划创建一种 Linux 类型的单一资源。

然后,Microsoft.Web/sites创建了两个:一个functionapp,linux用于函数应用程序,另一个app用于 Nodejs Web 应用程序。

我们的 Web 应用程序是一个简单的 Nodejs,它使用正在侦听端口的 express 服务器:

const express = require('express')
const session = require('express-session')
...
const app = express()
...
const port = process.env.PORT || '3000'
app.set('port', port)
app.listen(port, () => console.log(`App started on port ${port}`))

尝试

以下是我们尝试过但失败的步骤列表:

  • 我们将计划从基本 B2 增加到基本 B3
  • 我们使用WEBSITES_PORT和/或PORT用于Microsoft.Web/sitesweb 应用程序。此外,我们在 Web 应用程序本身内部创建了一个.dockerfilewithEXPOSE关键字。
  • 我们尝试将WEBSITES_WEBDEPLOY_USE_SCMset 应用于 false
  • 我们将 git 存储库中的文件结尾从 更改为CR LFLF应用更改并重新规范化。
  • 我们设置linuxFxVersion和/或nodeVersion
  • 对于Microsoft.Web/sites网络应用程序,
  • 我们设置http20Enabledfrom truetofalse并应用了不同版本的minTlsVersion
  • 我们玩过healthCheckPath, autoHealEnabled,autoHealRulesloadBalancing
  • 我们尝试增加WEBSITES_CONTAINER_START_TIME_LIMIT
  • 我们试图将文件夹包含node_modules到存储库中
  • 我们试图创建一个home目录甚至一个startup.sh文件
  • 我们尝试增加WEBSITES_CONTAINER_START_TIME_LIMIT
  • 我们尝试添加app.set('trust proxy', 1)
  • 我们尝试为所有 404 错误添加捕获
  • 我们创建了两个Microsoft.Web/serverfarms. 一个用于 Function App,另一个用于 Web App
  • 我们尝试添加DOCKER_ENABLE_CItrue
  • 我们尝试使用部署 YAML 文件中的任务属性添加应用服务中使用的标志(例如WEBSITES_PORTappSettingsAzureWebApp@1

我们甚至添加了一个入口点:

app.get('/api/health/', function(req, res){
  res.status(200).send('OK')
})

最后,我们花了几天的时间在网上搜索并尝试了我们遇到的所有问题,由于我们仍然没有解决这个问题,我们想知道是否有人能发现我们缺少什么。

在此先感谢您阅读这篇冗长的解释,并感谢您为我提供的任何帮助。

4

1 回答 1

0

我的同事 Albert Linga 发现了问题的根本原因。

Microsoft.Web/sites, properties,下siteConfig有属性remoteDebuggingEnabled。必须禁用此属性 ( false)。另外,kind属性必须从 更改appapp,linux

然后,在任务AzureWebApp@1中,我们将属性更改runtimeStackNODE|12-lts,使其与里面的属性linuxFxVersionNODE|12-lts)匹配siteConfig,在Microsoft.Web/sites

于 2020-09-25T22:49:35.543 回答