我有一个主机,它有一个docker容器。容器处于活动状态,并且正在运行特定的服务。在满足特定条件时,我希望移除容器并关闭机器。这样做是可能的吗?我计划修改运行服务的代码来处理机器的关闭?欢迎提出任何建议!
发布于 2017-03-08 10:53:57
运行干净关机将依赖于主机的init系统。
为了避免授予容器--privileged访问权限并避免在容器中安装特定于主机的初始化工具,您可以创建一个接口来通知主机关闭,而不是尝试让容器运行关闭。
一个接口
有很多方法可以做到这一点。一个简单的起点可以是一个挂载的卷,以便在容器和主机之间共享数据。现在一个文件就可以了,但是你可以使用套接字、fifo、TCP或任何其他你想要的IPC方法。
在主机上创建一个文件,比如/var/run/shutdown_signal,并将该文件挂载到您的容器中
docker run -d -v /var/run/shutdown_signal:/shutdown_signal whatever 当您想要关闭主机时,将一个字符串写入文件
docker exec $cid sh -c 'echo true > /shutdown_signal'然后,您需要在主机上运行一些程序来监视该文件。
一个使用inotifywait等待文件更改的简单脚本。
echo "waiting" > /var/run/shutdown_signal
while inotifywait -e close_write /var/run/shutdown_signal; do
signal=$(cat /var/run/shutdown_signal)
if [ "$signal" == "true" ]; then
echo "done" > /var/run/shutdown_signal
shutdown -h now
fi
done如果inotifywait不可用,您可以轮询该文件。
while sleep 30; do
signal=$(cat /var/run/shutdown_signal)
...可怕的选择
在Linux中,还有一种更通用的内核方式可以触发立即、不干净的关机。
docker run --privileged busybox \
sh -c 'echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger'但这可能会给你带来更多的问题而不是它的价值。
https://stackoverflow.com/questions/42660690
复制相似问题