支持Crystal Reports的Docker容器

时间:2019-04-11 17:21:00

标签: docker crystal-reports

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

我的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。.NET Framework 4.0 \ Common \ SAP BusinessObjects Enterprise XI 4.0 \ win64_x64 \ pageobjectmodel.dll的模块C:\ Program Files(x86)\ SAP BusinessObjects \ Crystal Reports无法注册。 HRESULT -2147024770。请与您的支持人员联系。 动作结束17:20:50:InstallFinalize。返回值3。

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

第一个错误似乎并未阻止安装。

欢迎提出任何有关此问题的疑难解答建议,以及其他创建映像的方法。

还要确认一下。该网站加载并正常运行。我只是不能使用任何需要Crystal Reports依赖项的功能。

2 个答案:

答案 0 :(得分:2)

使用完整的Windows 2019容器mcr.microsoft.com\windows:1809作为基础,安装程序将运行,这表明它只是缺少操作系统组件而已。

我没有记录“错误1904”,但也许我在其他主机操作系统上。

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

如果您:

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

这显示了对oledlg.dll的依赖。 这是服务器核心中唯一不存在的依赖项。

这不是很好,但是您可以从完整的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

答案 1 :(得分:0)

我将添加一个附加答案,而Peters答案对于安装Crystal Reports来说是完美的,而从Crystal Report导出为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图像的大小。