При попытке развернуть веб-приложение возникает следующая ошибка:
ОШИБКА. Контейнер 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), я установил 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





Для меня установка как -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.
Эй, тебе удалось найти решение для этого? Я столкнулся с той же проблемой