gpt4 book ai didi

docker - 如何关闭 docker 容器内的主机(ubuntu)

转载 作者:行者123 更新时间:2023-12-04 16:39:46 25 4
gpt4 key购买 nike

我想在 docker 容器完成工作时关闭机器(主机)。
我的主机操作系统是 Ubuntu。
容器可以运行为 --privileged=true .那不是问题。
我设法用命令(在stackoverflow答案中找到)做到了这一点:

subprocess.run("echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger", shell=True, check=True)
这种方法的问题是 Linux 中的直接、不干净的关闭。
如果我尝试一种干净的方式作为 shutdown now ,我收到以下错误: System has not been booted with systemd as init system (PID 1). Can't operate.如何在我的容器中使用 shutdown 或 halt 或其他替代方法来关闭主机?

最佳答案

对于您的特定情况,一旦 docker 退出 mikey 的解决方案就执行关闭操作简单而优雅。
对于更通用的情况,例如一堆 dockerized 微服务需要能够关闭或重新启动主机,可以使用以下方法:
在最近的 Debian 或 Ubuntu 等 systemd 系统中,shutdown/halt/poweroff/reboot命令只是到 systemctl 的符号链接(symbolic link)并且可以运行例如 systemctl halt而不仅仅是 halt .
所以问题变成了执行systemctl来自 docker 容器内的主机上的命令。这可以通过映射一些卷来实现,如以下命令:

docker run -it --rm -v /bin/systemctl:/bin/systemctl -v /run/systemd/system:/run/systemd/system -v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket -v /sys/fs/cgroup:/sys/fs/cgroup debian:10 systemctl --no-pager status
映射这些卷后,您可以执行 systemctl poweroff从 docker 内,主机将关闭并关闭电源。

关于docker - 如何关闭 docker 容器内的主机(ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63266824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com