从 alpine 图像中停止 docker 容器

Stop a docker container from within an alpine image

我正在尝试从 alpine 映像中停止 docker 容器:

> docker run -ti alpine sh
/ # poweroff
/ # poweroff -f
poweroff: Operation not permitted
/ # halt
/ # halt -f
halt: Operation not permitted
/ # whoami
root

你知道这有什么问题吗?

您需要终止进程 sh,只需这样:

exit

从容器内。将容器视为一个孤立的进程,而不是一个虚拟机。

你不能用这种方式停止 docker 图片。

首先,如果 poweroff 必须运行(它在过去确实如此,due to an issue)它会关闭整个计算机,因为 poweroff 二进制文件的工作方式和断电机制是在 Linux 和硬件上设计的。

为了正确关闭您的容器,您需要做的是退出入口点(shell 中的exit),或者向该进程发送信号(例如:docker stopSIGTERM 发送到 运行 入口点,然后在宽限期后将其杀死)。

如果你真的想从一个容器中关闭主机(你为什么要这样做?),你可以激活 --privileged 选项,这将在容器中为你的根提供所有权力容器,然后执行:

echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger

小心,这会真的 关闭主机,而且是一种残酷的方式。在 sysrq 中写入 1 将激活 sysrq 内核功能,这允许使用 SysRq key 以及通过 sysrq-trigger 文件向内核发出键盘请求。 o表示关机。

Fedora Project - Sysrq