我正在尝试从 Alpine 图像中停止Docker容器:

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

您知道这是什么问题吗?

最佳答案

您无法以这种方式停止docker镜像。

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

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

如果您确实要从容器中关闭主机(为什么要这样做?),则可以激活--privileged选项,该选项将为容器中的根提供所有电源,然后执行以下操作:
echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger
注意,这确实会以一种残酷的方式关闭主机。用1编写sysrq将激活sysrq内核功能,该功能允许使用SysRq key以及通过sysrq-trigger文件向内核发出键盘请求。 o表示关闭电源。

Fedora Project - Sysrq

07-24 09:39