我正在尝试从 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