如何在基于 windows 服务器核心的 docker 映像中安装 ODBC 驱动程序 17?

How to install ODBC Driver 17 in a docker image based on windows server core?

我正在为我的应用程序设置一个新的 docker windows 服务器核心映像。数据访问使用 ODBC Driver 17 for SQL Server。我需要在图像上安装它,所以在我的 Dockerfile 中包含以下内容:

FROM mcr.microsoft.com/windows/servercore:ltsc2016

COPY msodbcsql_17.3.1.1_x64.msi c:\msodbcsql_17.3.1.1_x64.msi

RUN msiexec.exe /i C:\msodbcsql_17.3.1.1_x64.msi /norestart /qn IACCEPTMSODBCSQLLICENSETERMS=YES
...

当我 运行 docker build... 我得到以下错误

The command 'cmd /S /C msiexec.exe /i C:\msodbcsql_17.3.1.1_x64.msi /norestart /qn IACCEPTMSODBCSQLLICENSETERMS=YES' returned a non-zero code: 1603

代码1603表示需要重新启动。

我不确定如何重新启动图像。我该如何进行呢?没有驱动程序,我将无法获得我的应用程序 运行ning.

所以我 运行 在启用日志记录的容器中手动添加 MSI。事实证明,失败是由于缺少 VC++ 可再发行组件而发生的。

因此,我通过添加一行来更新 Dockerfile 来复制和安装 vc_redist.x64.exe,这为我解决了问题。

Dockerfile 中的片段为我解决了问题。

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2
COPY vc_redist.x64.exe c:/ \
     msodbcsql_17.3.1.1_x64.msi c:/
RUN c:\vc_redist.x64.exe /install /passive /norestart 
RUN msiexec.exe /i C:\msodbcsql_17.3.1.1_x64.msi /norestart /qn /quiet /passive IACCEPTMSODBCSQLLICENSETERMS=YES 

...

只要在这里发布这个答案,以防其他人偶然发现同样的问题。