Windows容器中的容器文件权限

时间:2018-03-23 23:11:49

标签: asp.net docker iis docker-windows

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

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

有没有办法授予IIS用户代码作为访问此文件的权限,或者将文件夹打开给任何用户进行读/写访问?

当前的Docker文件如下:

FROM microsoft/aspnet

COPY ./Deploy/ /inetpub/wwwroot

RUN mkdir /inetpub/wwwroot/App_Data 

错误消息片段我从docker image运行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似乎暂时解决了问题。

2 个答案:

答案 0 :(得分:4)

不清楚原因,但cacls在构建容器时运行似乎不起作用。切换到使用icacls,并且能够对该文件夹授予IIS_USRS权限。

添加到dockerfile的行:

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

答案 1 :(得分:0)

我没有评论,因为我没有足够的声誉,但是如果@Darendal的答案不起作用(对我来说不行),请尝试以下语法

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