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"
我有一个 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"