【问题标题】:Container File Permissions in Windows ContainerWindows 容器中的容器文件权限
【发布时间】:2018-09-02 17:01:19
【问题描述】:

我有一个托管简单 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 

错误消息 sn-p 我从 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 似乎可以暂时解决问题。

【问题讨论】:

  • From 之后添加User Administrator 并从RUN 语句中删除-Credential
  • @GregorySuvalian 另外,不确定我应该在哪里添加User Administrator.. FROM 行只支持图像和标签,两者都没有空格,我找不到图像/ 用那个名字标记
  • 我的意思是换行User Administrator。见这里social.msdn.microsoft.com/Forums/en-US/…
  • 使用 PowerShell 或 cacls 授予 IIS_IUSRS 对 App_Data 文件夹的写入权限 Dockerfile。如果您使用匿名身份验证,还要授予匿名帐户相同的权限。
  • @GregorySuvalian 按照建议添加 USER Administrator 行会出现以下错误:error during CreateProcess: failure in a Windows system call: The user name or password is incorrect.

标签: asp.net docker iis docker-for-windows


【解决方案1】:

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

添加到 dockerfile 的行:

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

【讨论】:

  • 这帮助我解决了我的 Docker 映像中的 SQLite 数据库问题(遇到了this error)。只需将/t 标志添加到icacls 命令即可授予对所有子文件夹的访问权限。
【解决方案2】:

由于我没有足够的声誉,我无法发表评论,但如果 @Darendal 的答案不起作用(对我来说不起作用),那么试试这个语法

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

【讨论】:

  • 感谢那个版本。 (OI) = 目录对象继承。 (CI) = 目录容器继承。我需要它来设置一次权限并让未来的新文件继承相同的权限。
【解决方案3】:

我的 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"

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 2018-04-28
    • 2019-09-11
    • 2019-07-12
    • 2021-05-24
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多