已发布的Linux版.NET Core Azure App Service无权限操作puppeteer-sharp相关文件
问题根因
Azure Linux App Service 使用官方预制.NET Core 容器运行应用时,应用部署目录、系统默认临时目录均为只读挂载分区。Puppeteer Sharp 默认会将Chrome内核下载到当前程序运行目录或系统临时目录,写入操作触发只读文件系统报错,你无需尝试修改Web.dll的权限,该文件权限为系统默认配置,不影响业务运行。
解决方案
按以下步骤修改即可正常运行:
- 修改Puppeteer Sharp缓存路径
将Chrome下载路径指定到Azure App Service唯一的可写持久化分区/home下,代码配置示例如下:
// 全局配置Puppeteer Sharp默认下载路径 BrowserFetcher.DefaultOptions.Path = "/home/puppeteer-chrome-cache"; // 下载Chrome逻辑和原有逻辑保持一致即可 var browserFetcher = new BrowserFetcher(); await browserFetcher.DownloadAsync();
- 添加Chrome启动参数
Linux容器环境下需关闭Chrome沙箱机制避免启动失败,启动浏览器时增加以下配置:
var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, // 关闭沙箱适配容器环境 Args = new string[] { "--no-sandbox", "--disable-setuid-sandbox" } });
- 可选:补充Chrome运行依赖(按需操作)
如果启动时提示缺少运行依赖,可在Azure App Service配置页的「启动命令」栏填写以下命令,启动时自动安装缺失依赖:
apt update && apt install -y libx11-xcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libasound2 libatk1.0-0 libatk-bridge2.0-0 libpangocairo-1.0-0 libgtk-3-0 && dotnet Web.dll
如果对启动速度有要求,可自行构建包含Chrome和依赖的自定义镜像,替换官方预制容器镜像即可。
内容的提问来源于stack exchange,提问作者Imran Sh
相关产品推荐
相关产品推荐

