【问题标题】:Difference between installing service in Windows Container and Windows Server 2016?在 Windows Container 和 Windows Server 2016 中安装服务的区别?
【发布时间】:2016-10-19 23:27:41
【问题描述】:

我有一个服务应用程序,可以使用以下命令在 Windows Server 2016 Standard 中正确安装:

PS C:\Service> c:\\mysvc\\mysvc.exe -install
Service installed successfully

如果我在 Dockerfile 中使用:

RUN c:\\mysvc\\mysvc.exe -install

我得到以下输出:

命令 'cmd /S /C c:\svc\mysvc.exe -install' 返回一个 非零码:3221225781

我不确定为什么它的行为不同,或者我可以在哪里检查以获得关于错误原因的一些更好的想法。

【问题讨论】:

    标签: docker service windows-server-2016


    【解决方案1】:

    调试此类问题的一个有用技巧是在交互式容器中运行基础映像,按照 Dockerfile 的步骤操作,看看是否会得到一些更有用的输出。

    在你的情况下,类似于:

    docker run -it --name temp microsoft/windowsservercore cmd
    

    然后在 Windows 主机上的另一个命令中:

    docker cp mysvc.exe temp:c:/mysvc.exe
    

    然后回到交互式容器中运行c:\mysvc -install

    如果输出没有帮助,您可以在此处为您的问题添加更多详细信息 - Dockerfile 和有关 Windows 服务的一些信息。

    【讨论】:

    • 我按照您的建议尝试了,当我运行 c:\mysvc.exe -install 命令时,该命令只是返回,没有输出,没有创建正在运行的进程,没有创建服务,没有报告错误,没有什么。这很奇怪。
    • 好的 - 你的 FROM 图片是什么?该exe是否有任何详细安装的开关?
    • 最好的猜测是您的服务有一些依赖项在服务器核心基础映像中不存在或未启用,但除非您可以从 exe 获得更多信息,否则很难弄清楚。
    • 我实际上至少发现了部分问题。除其他外,Server Core 2016 似乎没有以下 dll:opengl32.dll、oledlg.dll、glu32.dll 和 ddraw.dll,而 Server 2016 标准则有。将这些 dll 从 Server 2016 标准复制到我的 Server Core VM 可以让我安装该服务。我没有在我的服务器核心容器中看到错误消息,因为它实际上会弹出一个消息对话框告诉你它找不到它们,容器似乎不支持。
    • 嗯。它们听起来都像 UI 组件,所以我会质疑为什么它们是 Windows 服务的依赖项。另外 - 不确定复制 DLL 的许可影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2016-08-24
    • 2019-01-28
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多