Почему игнорируется WEBSITES_PORT и PORT в Microsoft.Web/sites, а также EXPOSE в dockerfile?

#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 свойство task AzureWebApp@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