如何从容器内关闭主机?
How to shut down the host from within the container?
我正在编写一个 UPS 监控控制台应用程序,当 UPS 电池在停电期间达到预定义的充电水平时,它将自动关闭服务器。
如果可能的话,我想 运行 在一个容器中执行此操作,因为众所周知,NUT(网络 UPS 工具)很难在 Windows 系统上运行。我已经在裸机上配置了一次,我希望不必再忍受这种痛苦,或者更糟的是,第三次。 (但那是另一天的讨论。)
回到今天:如何向容器主机发送系统关闭命令?我只是尝试 shutdown /s /t 0
,但这会关闭容器。我需要联系房东。
--关闭投票者须知--
这个问题不是题外话。请注意 this Q&A,举一个例子,目前支持票数远远超过 2,000。问题中没有提到任何一个编程概念。
Docker是开发者使用的工具。所以它的主题在这个论坛上非常相关。 运行 快速查询 docker
标签,您就会明白我的意思。
psshutdown \host -u ... -p ...
应该可以解决问题,假设您能够/愿意在容器中存储具有足够权限的凭据。
有关详细信息和下载,请参阅 https://technet.microsoft.com/en-us/sysinternals/psshutdown.aspx。link。
编辑:我把它留在这里是为了记录一种由于 Windows 处理安全性的方式发生变化而不起作用的方法。遵循下面提供的 InteXXs link,它清楚地描述了使 psshutdown 再次工作所必需的条件以及这会带来哪些安全风险。
一种涉及少量编程的方法是创建一个位于主机上并等待传入连接的小型服务。
该服务然后可以执行关闭命令或调用适当的 Windows API 调用。
我建议使用单个 URL 为该服务提供一个最小的 http 端点,并使用用户名/密码和 SSL/TLS.
保护它
然后您可以使用 curl --user user:pass https://host/shutdown
从容器中调用它
用 golang 和 nssm 实现这个应该相当容易。
我正在编写一个 UPS 监控控制台应用程序,当 UPS 电池在停电期间达到预定义的充电水平时,它将自动关闭服务器。
如果可能的话,我想 运行 在一个容器中执行此操作,因为众所周知,NUT(网络 UPS 工具)很难在 Windows 系统上运行。我已经在裸机上配置了一次,我希望不必再忍受这种痛苦,或者更糟的是,第三次。 (但那是另一天的讨论。)
回到今天:如何向容器主机发送系统关闭命令?我只是尝试 shutdown /s /t 0
,但这会关闭容器。我需要联系房东。
--关闭投票者须知--
这个问题不是题外话。请注意 this Q&A,举一个例子,目前支持票数远远超过 2,000。问题中没有提到任何一个编程概念。
Docker是开发者使用的工具。所以它的主题在这个论坛上非常相关。 运行 快速查询 docker
标签,您就会明白我的意思。
psshutdown \host -u ... -p ...
应该可以解决问题,假设您能够/愿意在容器中存储具有足够权限的凭据。
有关详细信息和下载,请参阅 https://technet.microsoft.com/en-us/sysinternals/psshutdown.aspx。link。
编辑:我把它留在这里是为了记录一种由于 Windows 处理安全性的方式发生变化而不起作用的方法。遵循下面提供的 InteXXs link,它清楚地描述了使 psshutdown 再次工作所必需的条件以及这会带来哪些安全风险。
一种涉及少量编程的方法是创建一个位于主机上并等待传入连接的小型服务。
该服务然后可以执行关闭命令或调用适当的 Windows API 调用。
我建议使用单个 URL 为该服务提供一个最小的 http 端点,并使用用户名/密码和 SSL/TLS.
保护它然后您可以使用 curl --user user:pass https://host/shutdown
用 golang 和 nssm 实现这个应该相当容易。