从 docker 内部关闭主机系统的最合适方法是什么

问题描述 投票:0回答:1

我的容器运行一个网络服务器和一些传感器。它旨在作为现场使用的边缘计算单元。我过去在使用非 dockerized 版本时遇到过问题,当时它是在不使用网络服务器关闭按钮的情况下关闭的。

最近的设计更改允许我添加一个与 GPIO 引脚相连的按钮。我的容器在特权模式下运行,我假设我可以监视此按钮并在按下该按钮时使用“shutdown -h now”运行脚本?

是这样吗?主机系统是Debian。

docker shutdown
1个回答
1
投票

按下时使用“shutdown -h now”运行脚本?

您可以运行

halt
,它将通过向内核发送 reboot(LINUX_REBOOT_CMD_HALT systemd 调用来“立即”停止您的系统。 I/O 操作不会被刷新,数据可能会丢失。很高兴在这之前打电话给
sync
要正常关闭系统,您必须向系统管理员

传达

关闭的意图。 不久前,

shutdown

刚刚向 PID 1 发送信号(即,它正在“传达”关闭的意图)。如果是 docker,它将杀死 PID 1

在容器内
,因此 docker 容器将被停止。 如果现在使用 systemd,您必须向主机上的 PID 1 systedm 进程发送一条 dbus(或任何 systemd 用于通信的内容)消息。

最简单的方法是直接

ssh 到您的主机并执行 shutdown

(或

systemd-shutdown

)。
我认为更困难的解决方案是从主机访问 DBUS 并在其上发送正确的消息。

© www.soinside.com 2019 - 2024. All rights reserved.