有没有人设法在Windows Docker容器中运行FBCMD.exe?

时间:2019-08-12 12:30:43

标签: powershell docker windows-server-2016 finalbuilder

我正在尝试使 Finalbuilder(FBCMD.exe) Windows Docker容器中运行。在我的服务器上,有一个 Jenkins主服务器,该主机使用Docker容器作为从服务器。作为构建步骤,我想通过 FBCMD.exe 在容器内启动 FB8项目(我知道虚拟化所需的许可证,获得了站点许可证)。

我在容器内安装了 /VERYSILENT FB8 。 Docker容器具有 .NET Framework> 4.5 Powershell版本5.xx。,并且许可证密钥位于正确的路径中:“ C:\ Program Data…” < / p>

但是,每次我尝试在容器内运行FBCMD.exe时,它绝对不会执行任何操作。相同的命令在我的台式机上也可以使用。

我没有使用Dockerfile。我创建容器的方式如下:

  1. 使用了“ mcr.microsoft.com/windows/servercore 1”图像并启动了一个容器

  2. 给容器一个卷,以轻松地将文件从我的主机(Win Server 2016)复制到容器。

  3. 检查过的Powershell和.net Framework版本

  4. 将FB8安装程序复制到容器中

  5. 通过“ .\FB800… /VERYSILENT”安装并检查“…Program Files(x86)”中是否存在文件

  6. 将许可证密钥从主机移至“ C:\ Program Data \ VSoft ...”

  7. 停止容器并使用“ docker commit”命令创建新图像

  8. 使用最近创建的图像启动一个新容器,并尝试启动FBCMD.exe

这就是我被困住的地方。与上述步骤并行,我安装了Java,并将agent.jar复制到了容器中。它们在新创建的图像中正常工作。

有人知道如何解决此问题吗?还是可以正常工作?

1 个答案:

答案 0 :(得分:0)

不幸的是,当在容器中运行时(甚至在没有Desktop Experience的服务器核心上运行),您将无法获得有关失败加载依赖项的相同信息,例如VC ++运行时dll,DirectX。

并非所有依赖项都以相同的方式加载,根据应用程序的不同,您可能可以使用应用程序中的日志记录选项Get-EventLogsxstrace来捕获依赖项错误。

如果您已经设法将其安装在任意计算机上,即您的容器主机,则可能会遇到如下问题:

  • 组装所需的任何二进制文件/许可证/脱机安装程序/依赖项
  • 创建一个powershell脚本以安装依赖项和应用程序
  • 在运行与容器目标相同的OS版本的空白Hyper-V VM上运行脚本,并对其进行调整,直到其生效。
  • 找到适合您的容器宿主操作系统的正确容器标记,例如1809
  • 基于mcr.microsoft.com/windows:<TAG>创建一个docker容器,复制上述文件并测试脚本
  • 重复定位mcr.microsoft.com/windows/servercore:<TAG>,以确认该应用是否需要servercore没有的某些依赖项
  • 一旦您知道自己有可用的基本容器,则可能要切换对本机docker命令使用powershell的方法-甚至尝试将应用拖入nanoserver