当前位置: 首页 > 知识库问答 >
问题:

Azure:容器未在预期时间内启动(WebApp)

贡和裕
2023-03-14

尝试部署Web应用程序时,我遇到以下错误:

错误-站点XXX的容器XXX\u 0未在预期的时间限制内启动。运行时间=1800.4463925秒

我试图部署一个节点应用程序。使用自动部署。部署文件。部署文件如下所示:

# 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"
  }

和服务器。详情如下:

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.log("HEYYYY");
// Without express
app.prepare()
  .then(() => {
    console.log("Ready on Localhost:80!!!");
    createServer(handler)
      .listen(80, (err) => {
        if (err) throw err;
        console.log("Ready on Localhost:80");
      });
  })

我从研究中得出的结论是:

  1. 没有足够的时间让app启动
  2. 端口未打开/启动时没有响应ping

为了解决(1)我把WEBSITES_CONTAINER_START_TIME_LIMIT设为1800(这是最大值)

为了解决(2)问题,我将端口(应用程序内设置)的值设置为“80”,以公开该端口。(根据文件)

还有其他我应该尝试的吗?

PS默认docker日志文件输出以下内容:

2018-10-15T14:32:59.946431939Z > XXX@1.0.0 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

共有2个答案

孙福
2023-03-14

>

  • 推荐的方法是让节点监听env。PORT.通过这种方式,PORT不会在应用程序中硬编码,系统可以通过环境变量传递它。

    如果必须使用硬编码端口,并且在“代码”场景中使用应用程序服务时,请使用应用程序设置端口指示代码中的值。

    如果必须使用硬编码端口,并且在“容器”场景中使用应用程序服务时,请使用应用程序设置WEBSITES\u port指示代码中的值。

    如果端口值与此日志条目中的内容相匹配:"未在预期的时间限制内启动。经过的时间”,到代码中的内容,检查代码的监听IP地址。如果代码正在监听localhost127.0.0.1,则在该特定容器之外无法访问该代码,因此,应用将无法启动。为了克服这一点,让应用程序代码监听0.0.0.0

  • 洪博涛
    2023-03-14

    对于我来说,在Azure应用程序服务部署任务中设置-Port 80-WEBSITES\u Port 80,Azure devops中的应用程序设置部分会有所帮助。它使docker从80端口开始,而不是8000端口。这是该任务的应用程序设置用法示例。

     类似资料:
    • 我正在尝试从Azure repos部署此应用程序。https://github.com/pointerness/Check 我已将其克隆到我的公司Azure repo中。这是一个简单的Python Django Hello World应用程序。我已经在我的个人Azure帐户上部署了很多次此代码,并且可以正常工作。我通过vscode将此应用部署到Azure中,它可以正常工作。然而,当我创建一个管道时

    • 问题内容: 我遇到错误了; 问题答案: 错误是 看来您有一个指的是您尚未声明的。 您需要具有以下声明

    • 我成功地在ubuntu 18.04上安装了docker和nvidia-docker,我从NVIDIA的GPU云中提取了这个图像 用这个命令运行它 例如,容器给了我一个shell提示,它似乎可以工作 导致 它看到了我脆弱的gpu。我尝试用这个命令运行jupyter 但我明白了 我知道Jupyter安装在容器里因为当我打字的时候 我得到 打字 给予 在连接到容器的主机目录中,我有几个笔记本 但似乎什么

    • 问题内容: 我使用以下命令创建了容器: 以下是命令: 真的没有太多要说的,我希望容器能启动并保持正常运行。这是日志: 问题答案: 您正在尝试运行,它是需要tty 才能运行的交互式外壳。使用,在“分离”模式下运行此命令实际上没有任何意义,但是您可以通过添加到命令行来做到这一点,以确保容器具有与其关联的有效tty并保持连接状态: 在启动分离的容器时,您通常会运行某种长期存在的非交互式进程(例如,或We

    • 问题内容: 我有一个嵌入式Tomcat服务器,可以 很好地提供静态文件。 但是,当我添加开始工作所需的buildPath代码时,它在我的一个项目中不起作用(项目之间存在很多差异……价值约5万行)。 在读取之前,我收到以下错误(我从中知道)。 似乎是由以下行引起的: 这是需要做的工作,如所描述这里(实际上,WebServlet确实没有不工作,在任何项目中,我和其他人使用的一些工作项目)。 显示Tom

    • 我遇到了一个恼人的问题,我的容器化应用程序在本地运行良好,但部署到Azure时失败,尽管端口已正确公开。 Azure web应用程序,用于基本B1机器上的Linux操作系统的容器。 nodejs v12 LTS,快速服务器监听HTTPS端口443。包含一个HTTP 404(未找到)错误处理程序。 M0沙盒(免费层)上的数据库db Mongodb Atlas。本地和Azure IP白名单。 dock