#node.js #docker #arm-template #azure-blueprints
#node.js #docker #arm-template #azure-blueprints
Вопрос:
Почему WEBSITES_PORT
и PORT
в Microsoft.Web/sites
игнорируется, а также, EXPOSE
в .dockerfile
?
Наш docker продолжает сбой при сбое проверки работоспособности. Нет ответа на HTTP-запросы.
Мы получаем такие сообщения didn't respond to HTTP pings on port: 8080
, как показано ниже:
Объяснение
Мы запускаем функциональное приложение и веб-приложение, выполняемые на Nodejs, в том же плане обслуживания приложений Azure.
Создается единый ресурс Microsoft.Web/serverfarms
типа Linux с использованием базового плана B2.
Затем Microsoft.Web/sites
создаются два: один из видов functionapp,linux
для приложения функции в и другой вид app
для веб-приложения Nodejs.
Наше веб-приложение представляет собой простой Nodejs, использующий экспресс-сервер, который прослушивает порт:
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}`))
Попытки
Ниже приведен список шагов, которые мы пробовали и потерпели неудачу:
- Мы увеличили план с Basic B2 до Basic B3
- Мы использовали
WEBSITES_PORT
и / илиPORT
вMicrosoft.Web/sites
для веб-приложения. Кроме того, мы создали.dockerfile
EXPOSE
ключевое слово with внутри самого веб-приложения. - Мы попытались применить
WEBSITES_WEBDEPLOY_USE_SCM
set к false - Мы изменили конец файлов с
CR LF
наLF
в репозитории git, применив изменение и повторно нормализуя. - Мы устанавливаем
linuxFxVersion
и / илиnodeVersion
Microsoft.Web/sites
Для веб-приложения,- Мы установили
http20Enabled
отtrue
доfalse
и применили разные версии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
. Один для функционального приложения, а другой для веб-приложения - Мы попытались добавить
DOCKER_ENABLE_CI
какtrue
- Мы попытались добавить флаги, используемые в службе приложений (например,
WEBSITES_PORT
), используяappSettings
свойство taskAzureWebApp@1
в нашем файле развертывания YAML
Мы даже добавили точку входа:
app.get('/api/health/', function(req, res){
res.status(200).send('OK')
})
Наконец, мы тратим дни на поиск в Интернете и пробуем все, с чем сталкивались, и, поскольку мы все еще не решаем эту проблему, нам было интересно, может ли кто-нибудь определить, чего нам не хватает.
Заранее спасибо за это длинное объяснение и ценю любую помощь, которую вы можете мне предоставить.
Ответ №1:
Мой коллега Альберт Линга выяснил, что является основной причиной проблемы.
Под Microsoft.Web/sites
, properties
, siteConfig
, есть свойство remoteDebuggingEnabled
. Это свойство должно быть отключено ( false
). Кроме того, kind
атрибут должен быть изменен с app
на app,linux
.
Затем в задаче AzureWebApp@1
мы изменили свойство runtimeStack
на NODE|12-lts
, чтобы оно соответствовало свойству linuxFxVersion
( NODE|12-lts
), которое находится внутри siteConfig
, под Microsoft.Web/sites