在成功进行 Docker 测试(使用标准 Hello World!图像)后,我想制作一个自制的 Hello World 输出。因此,我构建了一个标准应用程序 (.exe),它会提示“Hello World!”,当我在本地计算机(Windows 10)上打开它时,它运行良好。当我尝试在 docker 容器中打开它时,它什么也不做。没有任何错误消息。似乎容器实际上并没有执行该程序。
我的第一个方法是使用一个(显然是 Windows)容器,其中包含来自 MS 的 nanoserver 映像。但我读到可能缺少一些 .dll,所以我切换到 Windows Server Core(1607),但这仍然不起作用。其他更复杂的应用程序也无法运行(令人惊讶),即使我通过命令将整个开发文件夹从 Visual Studio 映射到容器-v
。
我暂时没有使用dockerfile。我用这个powershell命令创建了容器:docker run -i -it --rm -v <Workdirectory>:<Workdirectory2> microsoft/windowsservercore:1607 cmd
。之后我可以切换程序所在的目录并启动它,但它就是无法启动。
运行程序所需的所有文件都包含在容器内。Hello World 程序的代码仅cout << Hello World! << endl;
包含标准文件
编辑(以防有人遇到同样的问题):
找到解决方案。标准 servercore 或 nanoserver 映像的问题在于,它没有任何 MS Redistributables(缺少 DLL)。因此,任何未包含在该映像中的程序都无法启动。安装这些 Redistributables 解决了这个问题。