如何从容器中关闭主机?

时间:2017-07-04 07:41:50

标签: windows docker windows-server-2016

我正在编写一个UPS监控控制台应用程序,当UPS电池在断电期间达到预定义的充电水平时,该应用程序将自动关闭服务器。

如果可能的话,我想在容器内运行它,因为NUT(网络UPS工具)非常难以在Windows系统上运行。我已经在裸机上配置了一次,我希望不要再次忍受这种疼痛,或者更糟的是,第三次。 (但这是另一天的另一场讨论。)

回到今天:我如何向容器的主机发送系统关闭命令?我只是尝试了shutdown /s /t 0,但这会关闭容器。我需要联系主持人。

- 注意关闭选民 -

这个问题偏离主题。注意this Q&A,举一个例子,它目前的票数超过2,000。问题中没有提到单一的编程概念。

Docker是开发人员使用的工具。所以它的主题在这个论坛上非常重要。对docker标记运行快速查询,您就会明白我的意思。

2 个答案:

答案 0 :(得分:0)

假设您能够/愿意在容器中存储具有足够权限的凭据,那么

psshutdown \\host -u ... -p ...应该可以解决这个问题。

有关详细信息和下载链接,请参阅https://technet.microsoft.com/en-us/sysinternals/psshutdown.aspx

编辑:我将此留在此处,以记录由于Windows处理安全性的方式发生变化而无效的方法。按照下面提供的InteXXs链接,它清楚地描述了让psshutdown再次运行以及带来哪些安全风险所需的内容。

答案 1 :(得分:0)

涉及一些编程的方法是创建一个位于主机上并等待传入​​连接的小型服务。

然后该服务可以执行shutdown命令或调用适当的Windows API调用。

我建议使用单个URL为此服务提供最小的http端点,并使用用户/密码和SSL / TLS保护它。

然后,您可以使用curl --user user:pass https://host/shutdown

从容器中调用此方法

用golang和nssm实现它应该相当容易。