Azure Web Service配置Node.js 18但部署用v16导致失败求助
部署Azure Web Service时Node.js版本不符问题排查
问题背景
我尝试用Node.js v18部署Azure Web Service,已完成以下配置:
- 在「设置>配置」中设置运行时为Node.js v18;
- 执行命令
az webapp config show --resource-group <RG-name> --name <ServiceName> --query linuxFxVersion,返回"NODE|18.20.1",确认版本为v18; - 容器拉取日志显示使用18-lts镜像:
2024-08-12T17:08:30.841Z INFO - 18-lts_20220228.1.tuxprod Pulling from appsvc/node 2024-08-12T17:08:30.852Z INFO - Digest: sha256:151be8808b6230b7f1d902cf9fb20cd796016a00bd9a32c45910d6a5fe6c473c 2024-08-12T17:08:30.852Z INFO - Status: Image is up to date for 10.1.0.4:13209/appsvc/node:18-lts_20220228.1.tuxprod 2024-08-12T17:08:30.864Z INFO - Pull Image successful, Time taken: 0 Seconds 2024-08-12T17:08:30.904Z INFO - Starting container for site 2024-08-12T17:08:30.905Z INFO - docker run -d --expose=8080 --name ......
但实际部署日志显示Node.js版本为v16.13.1,导致部署失败:
2024-08-12T16:18:09.714643966Z _____ 2024-08-12T16:18:09.714690368Z / _ \ __________ _________ ____ 2024-08-12T16:18:09.714696968Z / /_\ \___ / | \_ __ \_/ __ \ 2024-08-12T16:18:09.714701869Z / | \/ /| | /| | \/\ ___/ 2024-08-12T16:18:09.714706569Z \____|__ /_____ \____/ |__| \___ > 2024-08-12T16:18:09.714711469Z \/ \/ \/ 2024-08-12T16:18:09.714716169Z A P P S E R V I C E O N L I N U X 2024-08-12T16:18:09.714720869Z 2024-08-12T16:18:09.714725270Z Documentation: http://aka.ms/webapp-linux 2024-08-12T16:18:09.714729770Z NodeJS quickstart: https://aka.ms/node-qs 2024-08-12T16:18:09.714734270Z NodeJS Version : v16.13.1 <-------- 2024-08-12T16:18:09.714738770Z Note: Any data outside '/home' is not persisted 2024-08-12T16:18:09.714743271Z 2024-08-12T16:18:09.965438943Z Starting periodic command scheduler: cron. 2024-08-12T16:18:10.058709071Z Cound not find build manifest file at '/home/site/wwwroot/oryx-manifest.toml' 2024-08-12T16:18:10.058795475Z Could not find operation ID in manifest. Generating an operation id... 2024-08-12T16:18:10.058804876Z Build Operation ID: fa38d167-796d-4f30-af51-d11537e25846 2024-08-12T16:18:10.281955010Z Environment Variables for Application Insight's IPA Codeless Configuration exists.. 2024-08-12T16:18:10.289068956Z Writing output script to '/opt/startup/startup.sh' 2024-08-12T16:18:10.310169580Z Running #!/bin/sh 2024-08-12T16:18:10.310198181Z 2024-08-12T16:18:10.310205082Z # Enter the source directory to make sure the script runs where the user expects 2024-08-12T16:18:10.310211182Z cd "/home/site/wwwroot" 2024-08-12T16:18:10.310216482Z 2024-08-12T16:18:10.310222183Z export NODE_PATH=/usr/local/lib/node_modules:$NODE_PATH 2024-08-12T16:18:10.310227883Z if [ -z "$PORT" ]; then 2024-08-12T16:18:10.310233183Z export PORT=8080 2024-08-12T16:18:10.310238583Z fi 2024-08-12T16:18:10.310243784Z 2024-08-12T16:18:10.310248984Z PATH="$PATH:/home/site/wwwroot" bash /home/site/wwwroot/start-dev.sh 2024-08-12T16:18:10.326757685Z Starting custom deployment script... 2024-08-12T16:18:10.354607138Z Expected: v18.20.1 2024-08-12T16:18:10.366245803Z Actual: v16.13.1
请问我忽略了什么配置?
可能的遗漏配置项
检查项目本地Node版本锁定文件
- 代码目录中如果存在
.nvmrc、.node-version或者package.json里的engines.node字段,Azure的构建工具Oryx会优先使用这些文件指定的版本,而非全局配置的运行时版本。若这些文件指定了v16.13.1,就会导致部署时使用该版本。 - 解决:更新这些文件中的版本号为
18.x或具体的18.20.1。
- 代码目录中如果存在
检查启动脚本中的Node路径
- 启动脚本
start-dev.sh可能硬编码了Node的路径,或者使用了项目本地安装的Node版本(比如通过nvm安装在/home目录下的v16)。 - 解决:修改
start-dev.sh,确保调用系统全局的Node(通常路径为/usr/local/bin/node),或者显式指定使用v18版本的Node。
- 启动脚本
检查应用设置中的环境变量
- 查看Azure Web Service的「设置>配置>应用程序设置」,是否存在
NODE_VERSION环境变量。若该变量被设置为16.13.1,会覆盖全局的运行时配置。 - 解决:删除该环境变量,或者将其值改为
18.20.1。
- 查看Azure Web Service的「设置>配置>应用程序设置」,是否存在
清理旧的部署缓存
- Azure Web Service可能缓存了之前使用v16版本构建的依赖或脚本,导致新部署时仍使用旧版本。
- 解决:在Azure门户的「部署中心」选择「高级」选项,点击「清理」按钮清除缓存,然后重新部署。
内容的提问来源于stack exchange,提问作者Michael Seltenreich
相关产品推荐
相关产品推荐

