Windows Docker容器中ASP.NET Web API的App_Data文件夹权限问题求助
解决Windows Docker容器中IIS用户访问App_Data文件夹的权限问题
嘿,这个问题我之前也碰到过,刚好是microsoft/aspnet镜像的一个已知坑,我来给你捋清楚怎么解决:
问题出在哪?
你看到的System.UnauthorizedAccessException,本质是容器里IIS的运行用户组IIS_IUSRS没有拿到App_Data文件夹的读写权限——虽然你在Dockerfile里创建了这个文件夹,但Windows默认的文件夹权限并没有开放给IIS进程使用的用户组。
永久解决:把权限配置写到Dockerfile里
最省心的办法是直接在构建镜像的时候就把权限设置好,这样每次启动容器都不用手动调整。修改你的Dockerfile成这样:
FROM microsoft/aspnet COPY ./Deploy/ /inetpub/wwwroot RUN mkdir /inetpub/wwwroot/App_Data \ && icacls "C:\inetpub\wwwroot\App_Data" /grant IIS_IUSRS:(OI)(CI)F /T
这里用icacls替代你提到的cacls是因为它是Windows推荐的权限管理工具,参数解释下:
(OI)(CI):让权限自动应用到这个文件夹下已有的和未来新建的所有文件、子文件夹F:授予完全控制权限(读写删都能操作)/T:递归处理文件夹里的所有子项
临时应急办法
如果只是想快速验证功能,你可以启动容器后进入交互式命令行执行:
icacls C:\inetpub\wwwroot\App_Data /G IIS_IUSRS:F /T
你之前用的cacls App_Data /G IIS_IUSRS:F也能临时生效,但icacls的兼容性和功能更全面。
另外你提到的这个问题确实是microsoft/aspnet镜像的公开已知问题,社区里已经有不少讨论啦。
内容的提问来源于stack exchange,提问作者Darendal
相关产品推荐
相关产品推荐

