为什么WEBSITES_PORT
和PORT
inMicrosoft.Web/sites
被忽略,以及EXPOSE
in .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/sites
web 应用程序。此外,我们在 Web 应用程序本身内部创建了一个.dockerfile
withEXPOSE
关键字。 - 我们尝试将
WEBSITES_WEBDEPLOY_USE_SCM
set 应用于 false - 我们将 git 存储库中的文件结尾从 更改为
CR LF
,LF
应用更改并重新规范化。 - 我们设置
linuxFxVersion
和/或nodeVersion
- 对于
Microsoft.Web/sites
网络应用程序, - 我们设置
http20Enabled
fromtrue
tofalse
并应用了不同版本的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
)appSettings
AzureWebApp@1
我们甚至添加了一个入口点:
app.get('/api/health/', function(req, res){
res.status(200).send('OK')
})
最后,我们花了几天的时间在网上搜索并尝试了我们遇到的所有问题,由于我们仍然没有解决这个问题,我们想知道是否有人能发现我们缺少什么。
在此先感谢您阅读这篇冗长的解释,并感谢您为我提供的任何帮助。