Azure App Service Linux自定义启动脚本被忽略,.NET7 API部署异常
.NET 7 Azure App Service Linux 启动脚本失效的解决办法
问题根源
Azure App Service 对.NET 7+的Linux容器启动逻辑做了调整——默认会自动识别项目的可执行文件或Program.cs入口,直接启动应用,跳过了自定义启动脚本的执行。而.NET 6及更早版本的容器还保持着原有的兼容逻辑,所以脚本能正常运行。
具体修复步骤
1. 强制指定启动命令
直接在Azure门户把启动脚本设为最高优先级:
- 打开你的App Service资源页
- 进入配置 > 常规设置,在启动命令栏填写
./startup.sh(需确保脚本位于发布后的根目录)
2. 给脚本添加可执行权限
Linux环境下无执行权限的脚本无法运行,两种解决方式:
- 在项目的
.csproj文件中添加配置,发布时自动赋予权限:
<ItemGroup> <None Update="startup.sh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Executable>true</Executable> </None> </ItemGroup>
- 或者在启动脚本开头先修复权限,再执行后续操作:
chmod +x ./startup.sh # 这里添加依赖安装命令,示例: apt-get update && apt-get install -y your-dependency-package # 显式启动.NET 7 API dotnet YourApiProject.dll --urls=http://0.0.0.0:8080
3. 显式调用.NET程序
.NET 7容器会优先寻找默认应用入口,因此在启动脚本中必须明确写出应用启动命令,避免系统自动跳过脚本:
脚本末尾务必添加类似dotnet YourApiProject.dll的启动指令,带上端口参数能避免端口冲突问题。
4. 检查脚本存放位置
通过Kudu工具(https://<你的应用名>.scm.azurewebsites.net)的Debug Console查看文件结构,确认startup.sh位于发布包的根目录,而非子文件夹中,否则系统无法找到脚本。
验证方式
部署完成后,在Kudu的Log Stream中搜索startup.sh相关日志,如果出现Executing startup script 'startup.sh'的条目,说明脚本已被正常执行。
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

