如何在通过 Dockerfile 中的 Chocolatey 安装时以其他用户身份安装 SQL Server Express

问题描述 投票:0回答:1

我正在尝试更新一些 teamcity build agent docker 容器。我们现在需要在构建代理上安装 SQL Server Express。我们正在使用 chocolatey 在 dockerfile 中的容器上安装其他程序,所以我在 dockerfile 中添加了

RUN choco install sql-server-express -y

然而,当 teamcity 尝试访问 SQL Server 时,它收到一个错误:`

System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。

我在构建代理中打开了一个 powershell 窗口,并尝试使用

$sqlConnection.ConnectionString = "Data Source=$env:computername\SQLEXPRESS;Integrated Security=true;"
连接到 SQL 服务器,但是那里还有另一个错误:

Exception calling "Open" with "0" argument(s): "A network-related or instance-specific error while establishing a connection to SQL Server. 服务器未找到或不可访问。验证实例名称是正确并且 SQL Server 配置为允许远程连接。

查看事件日志,发现如下错误:

  • SQL Server 无法生成 FRunCommunicationsManager 线程。检查 SQL Server 错误日志和操作系统错误日志以获取有关可能相关问题的信息。
  • 由于网络库中的内部错误而无法启动网络库。要确定原因,请查看错误日志中紧接此错误之前的错误。
  • TDSSNIClient 初始化失败,错误为 0x5,状态代码为 0x1。原因:初始化失败,基础结构错误。检查以前的错误。访问被拒绝。
  • TDSSNIClient 初始化失败,错误为 0x5,状态代码为 0x51。原因:无法在注册表中配置与 MDAC 兼容的命名管道协议管道名称。访问被拒绝。

这似乎与这里的问题类似:SQL Server 2014 SP2 does not start on Windows Docker,我相信是因为容器管理员帐户(容器中的默认用户帐户)没有被授予正确的权限来编辑打开管道所需的注册表项。

我试过在不安装 SQL 的情况下加载容器,然后以容器管理员身份使用 chocolatey 进行 powershelling 并安装 SQL,这样完成后,服务器连接正常。我还在 dockerfile 运行巧克力安装脚本之前运行了一个 whoami,它显示了 containeradministrator。但是由于某种原因,当安装在 dockerfile 中时,用户没有收到正确的权限。

我不确定如何解决这个问题。

Another similar issue: SQL Server can't auth user when installed witch chocolatey (via chef)

sql-server powershell docker chocolatey
1个回答
0
投票

尝试使用这种格式使您的 PowerShell 脚本适应 Dockerfile 构建:

RUN choco install sql-server-express -o -ia "'/q /ACTION=Install /INSTANCENAME=SQLEXPRESS /FEATURES=SQLEngine,Fulltext /UPDATEENABLED=0 /SQLSVCACCOUNT=\"NT AUTHORITY\System\" /SQLSYSADMINACCOUNTS=\"BUILTIN\ADMINISTRATORS\" /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS'" -f -y

灵感来自这里的评论部分:
https://community.chocolatey.org/packages/sql-server-express

© www.soinside.com 2019 - 2024. All rights reserved.