为什么WEBSITES_PORT和PORTinMicrosoft.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 LF,LF应用更改并重新规范化。 - 我们设置
linuxFxVersion和/或nodeVersion - 对于
Microsoft.Web/sites网络应用程序, - 我们设置
http20Enabledfromtruetofalse并应用了不同版本的minTlsVersion - 我们玩过
healthCheckPath,autoHealEnabled,autoHealRules和loadBalancing - 我们尝试增加
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_CI为true - 我们尝试使用部署 YAML 文件中的任务属性添加应用服务中使用的标志(例如
WEBSITES_PORT)appSettingsAzureWebApp@1
我们甚至添加了一个入口点:
app.get('/api/health/', function(req, res){
res.status(200).send('OK')
})
最后,我们花了几天的时间在网上搜索并尝试了我们遇到的所有问题,由于我们仍然没有解决这个问题,我们想知道是否有人能发现我们缺少什么。
在此先感谢您阅读这篇冗长的解释,并感谢您为我提供的任何帮助。
