windows 容器内的活动目录帐户(服务器 2016 TP5)

Active directory accounts inside a windows container (server 2016 TP5)

所以我有 Windows Server 2016 TP5,我正在使用这些容器。我能够很好地完成基本的 docker 任务。我正在尝试弄清楚如何将我们的一些 IIS 托管的 Web 应用程序容器化。

事实是,我们通常对数据库使用集成身份验证,对应用程序池使用域服务帐户。我目前没有测试 VM(在域中),因此我无法测试它是否可以在容器内运行。

如果主机加入了 AD 域,它的容器是否也是该域的一部分?我仍然可以 运行 使用域帐户进行处理吗?

编辑: 此外,如果我在 docker 文件中指定 "USER",这是否意味着我的应用程序池将 运行 使用它(而不是应用程序池标识)?

更新:此答案不再相关 - 适用于 2016 TP5。在以后的版本中添加了 AD 支持

原回答 快速回答 - 不,容器作为 AD 的一部分不受支持,因此您不能使用 AD 帐户在容器内 运行 进程或使用它进行身份验证

这曾经在 MS Containers 网站上提到过,但 original link 现在重定向了。

原始措辞(CTP 3 或 4?): "Containers cannot join Active Directory domains, and cannot run services or applications as domain users, service accounts, or machine accounts."

我不知道在以后的版本中是否会改变。

有人尝试 hack around it 但并不开心。

您无法将容器加入域,但如果您的应用需要进行身份验证,则可以使用托管服务帐户。省去了打包密码的麻烦

https://msdn.microsoft.com/en-us/virtualization/windowscontainers/management/manage_serviceaccounts

至少在某些情况下 Docker 容器中的 AD 集成确实有效:

  1. 您需要使用 AD 凭据访问网络资源。
    1. 运行 cmdkey /add:<network-resource-uri>[:port] /user:<ad-user> /pass:<pass> 在需要此访问权限的本地身份下
    2. 要在不修改 AppPoolIdentity 的情况下将相同的技巧应用于 IIS 应用程序,您需要一个围绕 cmdkey 的最简单的 .ashx 包装器(注意:您必须在 运行 时间内调用此包装器,例如:在ENTRYPOINT,否则网络凭据将映射到不同的本地身份)
  2. 您需要在 AD 用户下 运行 编码
    1. 使用 ADVAPI32 函数 LogonUserLOGON32_LOGON_NEW_CREDENTIALSLOGON32_PROVIDER_DEFAULT[=37 进行模拟=] 作为 suggested
  3. 您需要传输层网络安全,例如在对基于 AD 的资源进行 RPC 调用(例如:MSDTC)时。
    1. 使用最适合您的 guide 设置 gMSA。但是请注意,gMSA 需要 Docker 主机在域中。