在 Docker 容器中的 Server Core 2019 上安装 SQL Server LocalDB
Install SQL Server LocalDB on Server Core 2019 in Docker container
在 Docker 容器(图像 = mcr.microsoft.com/windows/servercore:ltsc2019
)中,我下载了 SQL Server Express 2019 安装程序。
我已经成功下载了 LocalDB msi:
SQL2019-SSEI-Expr.exe /Action=Download /MediaType=LocalDB /Quiet
文件下载到:
C:\Users\ContainerAdministrator\Downloads\en-us\SqlLocalDB.msi
但是... 运行ning msiexec
失败,没有任何错误消息。导航到上面提到的路径后,我执行:
msiexec.exe /qb /i .\SqlLocalDB.msi IAcceptSqlLocalDBLicenseTerms=YES
命令在零延迟后立即回到命令行。什么都没有安装。
我错过了什么?
编辑:
我正在尝试使用 LocalDB,因为这最终将成为 Azure Pipelines 构建代理。我们使用 Redgate 的“SqlChangeAutomation”powershell 工具,它使用 LocalDB。
编辑 2:
不确定这是否有进展,但是......我在 msiexec 日志记录方面搞砸了一点,发现我可以 运行 它与 /a
标志而不是 /i
并得到它安装成功。
msiexec.exe /qn /a SqlLocalDB.msi IAcceptSqlServerLicenseTerms=YES /L*V "C:\installers\SQL\install.log"
不幸的是,在导航到 C:\Program Files\Microsoft SQL Server0\tools\binn
和 运行ning SqlLocalDB.exe info
后,我得到了这个:
Call to LocalDBFormatMessage failed. Error code returned:
2311389462.
Error in LocalDBFormatMessage! Error code returned:
2311389462.
SQL LocalDB 需要 Visual C++ 可再发行组件,否则很多事情都无法正常进行(我的问题是 SqlWriter 服务根本不会在安装过程中创建)。
编辑:看来我可以使用 chocolatey 安装 vc_redist 和旧版本的 localdb。 (申请票证要求将 sqllocaldb 包更新到 2019)这样可以简化大多数人的操作。将原始 arguments/commands 保持在下方以防万一。
我的精确参数的 powershell 步骤(假设您收集了所需的文件):
start-process .\VC_redist.x64.exe -Wait -ArgumentList @('/install','/norestart','/passive')
请注意,我使用的是 https://aka.ms/vs/16/release/vc_redist.x64.exe
的 redist,应该是 2019 年的,但大量评论说我应该使用 SQL 安装程序包中的任何一个,或某些 2015 版本。然而,这些都没有在容器中为我“工作”,但这可能是我错误地调用了它们。除此之外,我需要安装的其他软件包无论如何都需要 2019。
start-process msiexec -Wait -ArgumentList @('/i','SqlLocalDB.msi','/qn','/norestart','/L*V','install.log','IACCEPTSQLLOCALDBLICENSETE RMS=YES')
请注意,此时“/i”而不是“/a”可以正常工作,并且“/norestart”选项。这是从 choco localdb
命令源中找到的。
获取一些事件日志的有用的 powershell 代码段(将“系统”更改为“应用程序”以获取其他事件日志)帮助我解决了问题,因为容器中没有事件查看器:get-eventlog -LogName System -After (Get-Date).AddMinutes(-5) | ? {-not $_.Source.Contains("DCOM") } |?{-not $_.Message.Contains("depends on the Background Tasks Infrastructure Service")}| Format-List
这并检查“install.log" SqlLocalDB.msi 中的一行行最终让我走上了正确的轨道。
我也试图为管道创建图像,通过 chocolatey 安装,所以我也简单地为可再发行组件安装了 chocolatey 包并解决了问题:
choco install vcredist-all -y
choco install sqllocaldb -y
在 Docker 容器(图像 = mcr.microsoft.com/windows/servercore:ltsc2019
)中,我下载了 SQL Server Express 2019 安装程序。
我已经成功下载了 LocalDB msi:
SQL2019-SSEI-Expr.exe /Action=Download /MediaType=LocalDB /Quiet
文件下载到:
C:\Users\ContainerAdministrator\Downloads\en-us\SqlLocalDB.msi
但是... 运行ning msiexec
失败,没有任何错误消息。导航到上面提到的路径后,我执行:
msiexec.exe /qb /i .\SqlLocalDB.msi IAcceptSqlLocalDBLicenseTerms=YES
命令在零延迟后立即回到命令行。什么都没有安装。
我错过了什么?
编辑: 我正在尝试使用 LocalDB,因为这最终将成为 Azure Pipelines 构建代理。我们使用 Redgate 的“SqlChangeAutomation”powershell 工具,它使用 LocalDB。
编辑 2:
不确定这是否有进展,但是......我在 msiexec 日志记录方面搞砸了一点,发现我可以 运行 它与 /a
标志而不是 /i
并得到它安装成功。
msiexec.exe /qn /a SqlLocalDB.msi IAcceptSqlServerLicenseTerms=YES /L*V "C:\installers\SQL\install.log"
不幸的是,在导航到 C:\Program Files\Microsoft SQL Server0\tools\binn
和 运行ning SqlLocalDB.exe info
后,我得到了这个:
Call to LocalDBFormatMessage failed. Error code returned:
2311389462.
Error in LocalDBFormatMessage! Error code returned:
2311389462.
SQL LocalDB 需要 Visual C++ 可再发行组件,否则很多事情都无法正常进行(我的问题是 SqlWriter 服务根本不会在安装过程中创建)。
编辑:看来我可以使用 chocolatey 安装 vc_redist 和旧版本的 localdb。 (申请票证要求将 sqllocaldb 包更新到 2019)这样可以简化大多数人的操作。将原始 arguments/commands 保持在下方以防万一。
我的精确参数的 powershell 步骤(假设您收集了所需的文件):
start-process .\VC_redist.x64.exe -Wait -ArgumentList @('/install','/norestart','/passive')
请注意,我使用的是https://aka.ms/vs/16/release/vc_redist.x64.exe
的 redist,应该是 2019 年的,但大量评论说我应该使用 SQL 安装程序包中的任何一个,或某些 2015 版本。然而,这些都没有在容器中为我“工作”,但这可能是我错误地调用了它们。除此之外,我需要安装的其他软件包无论如何都需要 2019。start-process msiexec -Wait -ArgumentList @('/i','SqlLocalDB.msi','/qn','/norestart','/L*V','install.log','IACCEPTSQLLOCALDBLICENSETE RMS=YES')
请注意,此时“/i”而不是“/a”可以正常工作,并且“/norestart”选项。这是从choco localdb
命令源中找到的。
获取一些事件日志的有用的 powershell 代码段(将“系统”更改为“应用程序”以获取其他事件日志)帮助我解决了问题,因为容器中没有事件查看器:get-eventlog -LogName System -After (Get-Date).AddMinutes(-5) | ? {-not $_.Source.Contains("DCOM") } |?{-not $_.Message.Contains("depends on the Background Tasks Infrastructure Service")}| Format-List
这并检查“install.log" SqlLocalDB.msi 中的一行行最终让我走上了正确的轨道。
我也试图为管道创建图像,通过 chocolatey 安装,所以我也简单地为可再发行组件安装了 chocolatey 包并解决了问题:
choco install vcredist-all -y
choco install sqllocaldb -y