为什么会忽略Microsoft.Web /站点中的WEBSITES_PORT和PORT,以及dockerfile中的EXPOSE?

问题描述

为什么WEBSITES_PORT中的PORTMicrosoft.Web/sites以及EXPOSE中的.dockerfile被忽略?

运行状况检查失败时,我们的Docker会继续崩溃。没有对HTTP ping的响应。

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

enter image description here

说明

我们在同一Azure应用服务计划上运行在Node.js上完成的功能应用和Web应用。

使用Basic B2计划创建了种类为Linux的单个资源Microsoft.Web/serverfarms

然后,创建两个Microsoft.Web/sites:一种用于功能应用程序,类型为functionapp,linux,另一种用于Nodejs Web应用程序,类型为app

我们的网络应用程序是一个使用Express服务器的简单Node.js,它正在监听端口:

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/sites用于Web应用程序。另外,我们在网络应用程序本身内部创建了一个.dockerfileEXPOSE关键字。
  • 我们尝试将WEBSITES_WEBDEPLOY_USE_SCM设置为false
  • 我们将git存储库中的文件末尾从CR LF更改为LF,应用更改并重新规范化。
  • 我们设置了linuxFxVersion和/或nodeVersion
  • Microsoft.Web/sites中使用该网络应用程序,
  • 我们将http20Enabled的{​​{1}}设置为true,并应用了不同版本的false
  • 我们玩过minTlsversionhealthCheckPathautoHealEnabledautoHealRules
  • 我们尝试增加loadBalancing
  • 我们试图将文件WEBSITES_CONTAINER_START_TIME_LIMIT包含在存储库中
  • 我们试图创建一个node_modules目录,甚至一个home文件
  • 我们尝试增加startup.sh
  • 我们尝试添加WEBSITES_CONTAINER_START_TIME_LIMIT
  • 我们尝试添加捕获所有404错误的记录
  • 我们创建了两个app.set('trust proxy',1)一个用于功能应用程序,另一个用于网络应用程序
  • 我们尝试将Microsoft.Web/serverfarms添加DOCKER_ENABLE_CI
  • 我们尝试使用部署YAML文件中任务true的{​​{1}}属性添加App Service中使用的标志(例如WEBSITES_PORT

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

appSettings

最后,我们花了几天时间在网上搜索并尝试遇到的所有问题,并且由于我们仍无法解决此问题,因此我们想知道是否有人可以发现我们所缺少的内容

预先,感谢您进行冗长的解释,并感谢您能为我提供的任何帮助。

解决方法

我的同事阿尔伯特·林加(Albert Linga)发现了问题的根本原因。

Microsoft.Web/sitespropertiessiteConfig下,有属性remoteDebuggingEnabled。必须禁用此属性(false)。另外,必须将kind属性从app更改为app,linux

然后,在任务AzureWebApp@1中,我们将属性runtimeStack更改为NODE|12-lts,使其与{内的属性linuxFxVersionNODE|12-lts)相匹配{1}}下的{1}}