Docker 支持 Crystal 报告的容器

Docker Container with support for Crystal Reports

我正在尝试创建一个 Docker 图像来托管我的 asp.net MVC 应用程序,该应用程序依赖于 Crystal 报告。

我的 dockerfile 看起来像这样

FROM microsoft/iis

COPY ./bin/Release/Publish/ c:\inetpub\wwwroot

RUN ["powershell.exe", "Install-WindowsFeature NET-Framework-45-ASPNET"]  
RUN ["powershell.exe", "Install-WindowsFeature Web-Asp-Net45"]

#install Crystal reports runtime
COPY Resources/Files/CRRuntime_64bit_13_0_21.msi . 
RUN powershell.exe -Command Start-Process CRRuntime_64bit_13_0_21.msi -ArgumentList '/quiet' -Wait

CRRuntime_64bit_13_0_21.msi 安装失败。我登录到我的容器和 运行 从 powershell 安装的 msi 并生成了一个日志。它很长,但有两点很突出:

  1. 错误 1904。模块 C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.[=37= .dll 注册失败。 HRESULT -2147024770。请联系您的支持人员。 操作结束 17:20:50:InstallFinalize。 Return 值 3.

  2. 操作结束17:23:56:安装。 Return 值 3。 MSI (s) (3C:54) [17:23:56:467]:产品:SAP Crystal .NET Framework(64 位)报告运行时引擎 -- 安装操作失败。 MSI (s) (3C:54) [17:23:56:467]: Windows 安装程序安装了产品。产品名称:SAP Crystal .NET Framework(64 位)的报表运行时引擎。产品版本:13.0.21.2533。产品语言:1033。制造商:SAP。安装成功或错误状态:1603.

第一个错误似乎没有停止安装。

欢迎提出解决此问题的任何建议以及创建图像的其他方法。

另外,确认一下。该网站加载并运行良好。我无法使用任何需要 Crystal 报告依赖项的功能。

使用完整的 Windows 2019 容器 mcr.microsoft.com\windows:1809 作为基础,安装程序可以正常工作,这暗示它只是缺少 OS 个组件。

我没有记录 'Error 1904' 但也许我在不同的主机上 OS。

安装程序日志显示自定义操作 SetASPDotNetDllPath 失败。

如果你:

  • 打开安装程序 MSI(例如在 Orca 中)
  • 找到并提取动作二进制文件,另存为 dll
  • 检查其导入(例如 dumpbin

这显示了对 oledlg.dll 的依赖。 这是 Server Core 中唯一不可用的依赖项。

它不是很好,但是你可以从完整的 windows 容器中复制这个版本来修复它:

FROM mcr.microsoft.com/windows:1809 as dll_source
FROM microsoft/iis

#hack in oledlg dll!!
COPY --from=dll_source /windows/system32/oledlg.dll /windows/system32/oledlg.dll 
COPY --from=dll_source /windows/syswow64/oledlg.dll /windows/syswow64/oledlg.dll 

RUN ["powershell.exe", "Install-WindowsFeature NET-Framework-45-ASPNET"]  
RUN ["powershell.exe", "Install-WindowsFeature Web-Asp-Net45"]

WORKDIR c:/temp
COPY CRRuntime_64bit_13_0_21.msi . 
RUN powershell.exe -Command Start-Process c:\temp\CRRuntime_64bit_13_0_21.msi -ArgumentList '/l*v c:\temp\install.log' -Wait

我将添加一个额外的答案,而 Peters 答案非常适合安装 Crystal 报告,我在从 Crystal 导出为 PDF 时遇到了缺少字体的其他问题举报。

这就是我最终得到的结果。关键是图像标签名称更改为旧版本。

#windowsservercore-1803 required as it has the fonts we need in the report in order to export to PDF
FROM microsoft/iis:windowsservercore-1803

#install features we need
RUN ["powershell.exe", "Install-WindowsFeature NET-Framework-45-ASPNET"]
RUN ["powershell.exe", "Install-WindowsFeature Web-Asp-Net45"]

#hack in oledlg dll so that Crystal Runtime will install
COPY Resources/Files/64/oledlg.dll /windows/syswow64/oledlg.dll
COPY Resources/Files/32/oledlg.dll /windows/system32/oledlg.dll

#copy in Crystal MSI and install. Note it's 64bit version
WORKDIR c:/temp
COPY Resources/Files/CRRuntime_64bit_13_0_21.msi .
RUN powershell.exe -Command Start-Process c:\temp\CRRuntime_64bit_13_0_21.msi -ArgumentList '/quiet /l*v c:\temp\install64.log' -Wait

#Add website files
COPY ./bin/Release/Publish/ /inetpub/wwwroot

出于某种原因,Microsoft 从版本 1803 到 1809 中删除了很多字体。我只能假设要减小 OS 图像大小。