问题描述
为什么WEBSITES_PORT
中的PORT
和Microsoft.Web/sites
以及EXPOSE
中的.dockerfile
被忽略?
运行状况检查失败时,我们的Docker会继续崩溃。没有对HTTP ping的响应。
我们收到诸如didn't respond to HTTP pings on port: 8080
之类的消息,如下所示:
说明
我们在同一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应用程序。另外,我们在网络应用程序本身内部创建了一个.dockerfile
和EXPOSE
关键字。 - 我们尝试将
WEBSITES_WEBDEPLOY_USE_SCM
设置为false - 我们将git存储库中的文件末尾从
CR LF
更改为LF
,应用更改并重新规范化。 - 我们设置了
linuxFxVersion
和/或nodeVersion
- 在
Microsoft.Web/sites
中使用该网络应用程序, - 我们将
http20Enabled
的{{1}}设置为true
,并应用了不同版本的false
- 我们玩过
minTlsversion
,healthCheckPath
,autoHealEnabled
和autoHealRules
- 我们尝试增加
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/sites
,properties
,siteConfig
下,有属性remoteDebuggingEnabled
。必须禁用此属性(false
)。另外,必须将kind
属性从app
更改为app,linux
。
然后,在任务AzureWebApp@1
中,我们将属性runtimeStack
更改为NODE|12-lts
,使其与{内的属性linuxFxVersion
(NODE|12-lts
)相匹配{1}}下的{1}}