9

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

问题是,我们通常对数据库使用集成身份验证,对应用程序池使用域服务帐户。我目前没有测试虚拟机(在域中),所以我无法测试它是否可以在容器内工作。

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

编辑:另外,如果我在 dockerfile 中指定“用户”,这是否意味着我的应用程序池将使用它运行(而不是应用程序池标识)?

4

3 回答 3

8

至少在某些情况下,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. 按照建议使用带有LOGON32_LOGON_NEW_CREDENTIALSLOGON32_PROVIDER_DEFAULT的ADVAPI32 函数LogonUser进行模拟
  3. 您需要传输层网络安全,例如在对基于 AD 的资源进行 RPC 调用(例如:MSDTC)时。
    1. 使用最适合您的任何指南设置 gMSA 。但是请注意,gMSA要求Docker 主机位于域中。
于 2017-04-19T14:31:27.493 回答
6

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

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

这曾经在 MS Containers 网站上提到过,但现在原始链接重定向了。

原始措辞(CTP 3 还是 4?):“容器不能加入 Active Directory 域,并且不能以域用户、服务帐户或机器帐户的身份运行服务或应用程序。”

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

有人试图破解它,但没有任何乐趣。

于 2016-08-04T15:15:33.507 回答
2

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

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

于 2016-11-23T06:54:36.557 回答