【发布时间】:2017-12-20 18:23:57
【问题描述】:
我正在尝试从 alpine 映像中停止 docker 容器:
> docker run -ti alpine sh
/ # poweroff
/ # poweroff -f
poweroff: Operation not permitted
/ # halt
/ # halt -f
halt: Operation not permitted
/ # whoami
root
你知道这是什么问题吗?
【问题讨论】:
我正在尝试从 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
小心,这真的会以残酷的方式关闭主机。在sysrq 中写入1 将激活sysrq 内核功能,它允许使用SysRq key 以及通过sysrq-trigger 文件向内核发出键盘请求。 o 表示关机。
【讨论】:
docker exec 发送这个SIGTERM 吗?
kill
您需要终止进程sh,只需这样做:
exit
从容器内。将容器视为一个孤立的进程,而不是虚拟机。
【讨论】: