Azure: контейнер не запустился в ожидаемое время (WebApp)

При попытке развернуть веб-приложение возникает следующая ошибка:

ОШИБКА. Контейнер XXX_0 для сайта XXX не запустился в течение ожидаемого срока. Истекшее время = 1800,4463925 сек.

Я пытаюсь развернуть приложение узла. Использование автоматического развертывания с файлом .deployment. Файл .deployment выглядит следующим образом:

# 1. KuduSync
if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then
  "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;
.deployment;deploy.sh"
  exitWithMessageOnError "Kudu Sync failed"
fi

# 2. Select node version
selectNodeVersion

# 3. Install npm packages for root directory
if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  # echo "Running $NPM_CMD install --production for root directory"
  # eval $NPM_CMD install --production
  echo "Running $NPM_CMD install --production for root directory"
  eval $NPM_CMD install
  exitWithMessageOnError "npm failed"
  ##################
  echo Building App...
  eval $NPM_CMD run build
  ##################
  echo Starting App...
  # eval $NPM_CMD run start
  # cd - > /dev/null
fi

#####################################################################################
echo "Finished successfully."

В файле package.json есть следующий сценарий:

  "scripts": {
    "dev": "node server.js",
    "build": "next build",
    "start": "echo 'work!!' && NODE_ENV=production && node server.js"
  }

А server.js выглядит следующим образом:

const {
  createServer
} = require('http')
const next = require('next')
const app = next({
  dev: process.env.NODE_ENV !== 'production'
})
const routes = require('./routes')
const handler = routes.getRequestHandler(app)
console.info("HEYYYY");
// Without express
app.prepare()
  .then(() => {
    console.info("Ready on Localhost:80!!!");
    createServer(handler)
      .listen(80, (err) => {
        if (err) throw err;
        console.info("Ready on Localhost:80");
      });
  })

В результате исследования я понял следующее:

  1. Не хватает времени для запуска приложения
  2. Порт не открыт / не отвечает на пинг при запуске

Чтобы решить (1), я установил WEBSITES_CONTAINER_START_TIME_LIMIT на 1800 (это максимум)

Чтобы решить (2), я установил WEBSITES_PORT (в настройках приложения) со значением «80», чтобы открыть этот порт. (Согласно документации)

Что-нибудь еще, что я должен попробовать?

PS файл журнала докеров по умолчанию выводит следующее:

2018-10-15T14:32:59.946431939Z > [email protected] start /home/site/wwwroot
2018-10-15T14:32:59.946455839Z > echo 'work!!' && NODE_ENV=production && node server.js
2018-10-15T14:32:59.946462839Z 
2018-10-15T14:33:00.249554126Z work!!
2018-10-15T14:34:41.634101502Z HEYYYY
2018-10-15T14:35:38.838555689Z  DONE  Compiled successfully in 48099ms14:35:38
2018-10-15T14:35:38.838868291Z 
2018-10-15T14:35:39.406086808Z Ready on Localhost:80!!!
2018-10-15T14:35:39.460029162Z Ready on Localhost:80

Эй, тебе удалось найти решение для этого? Я столкнулся с той же проблемой

rpd 11.04.2020 18:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
1
7 666
2

Ответы 2

Для меня установка как -Port 80, так и -WEBSITES_PORT 80 в задаче Azure App Service Deploy, помогла секция App Settings в azure DevOps. Это заставило докер запускаться с портом 80 вместо 8000. Он находится в пример использования настроек приложения для этой задачи.

  • Рекомендуемый способ сделать это - настроить прослушивание узла на env.PORT. Таким образом, ПОРТ не жестко запрограммирован в приложении, и система может передать его через переменную среды.

  • Если необходимо использовать жестко запрограммированный порт и при использовании службы приложений в сценарии «Код», используйте ПОРТ параметров приложения, чтобы указать значение в коде.

  • Если необходимо использовать жестко запрограммированный порт и при использовании службы приложений в сценарии «Контейнер», используйте параметр приложения WEBSITES_PORT, чтобы указать значение в коде.

  • Если значение порта совпадает с записью в журнале: "не начался в течение ожидаемого срока. Прошедшее время", с тем, что находится в коде, проверьте IP-адрес прослушивания на наличие кода. Если код прослушивает localhost или 127.0.0.1, то он не будет доступен за пределами этого конкретного контейнера, следовательно, приложение не запустится. Чтобы обойти это, сделайте так, чтобы код приложения прослушивался на 0.0.0.0.

Другие вопросы по теме