Windows 容器中的容器文件权限

Container File Permissions in Windows Container

我有一个 Windows Docker 容器 (microsoft/aspnet),它托管一个简单的 Web API。网络 API 从表单接受文件,将它们保存在临时文件夹中,进行一些处理,然后 returns 结果。

这在本地部署时工作正常,但在我的 Docker 容器中完成时,我的临时文件夹 (App_Data) 出现文件权限错误。

有没有办法授予代码为 运行 的 IIS 用户访问此文件的权限,或者向任何用户打开文件夹以进行 read/write 访问?

当前 Docker 文件如下:

FROM microsoft/aspnet

COPY ./Deploy/ /inetpub/wwwroot

RUN mkdir /inetpub/wwwroot/App_Data 

我从 docker 图片中得到 运行 API 的错误消息片段:

"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Access to the path 'C:\inetpub\wwwroot\App_Data\BodyPart_481b6424-f9a5-4608-894d-406145a48445' is denied.","ExceptionType":"System.UnauthorizedAccessException"

似乎在 aspnet-docker github 上有一个关于同一问题的错误。 [link]

与此同时,似乎 运行 cacls App_Data /G IIS_IUSRS:F 在启动容器后暂时解决了这个问题。

不清楚为什么,但是 cacls 在 运行 作为构建容器的一部分时似乎不起作用。切换到使用 icacls,并且能够授予对文件夹的 IIS_USRS 权限。

添加到 dockerfile 的行:

RUN icacls 'C:\inetpub\wwwroot\App_Data' /grant 'IIS_IUSRS:(F)'

我无法发表评论,因为我没有足够的声誉,但如果@Darendal 的回答不起作用(对我来说不起作用),请尝试此语法

RUN icacls C:\inetpub\wwwroot\App_Data /grant "BUILTIN\IIS_IUSRS:(OI)(CI)F" /t

我的 dockerfile 没有接受任何其他答案。下面是另一种选择。

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8
SHELL ["powershell"] 
RUN & ICACLS "'C:\inetpub\wwwroot\App_Data'  /grant 'IIS APPPOOL\DefaultAppPool:(OI)(CI)F' /T"