我正试图在阿尔卑斯山图像中停止一个码头工人容器:
> docker run -ti alpine sh
/ # poweroff
/ # poweroff -f
poweroff: Operation not permitted
/ # halt
/ # halt -f
halt: Operation not permitted
/ # whoami
root
你知道这有什么问题吗?
答案 0 :(得分:4)
您无法以这种方式停止泊坞窗图像。
首先,如果poweroff
必须运行(并且过去曾做过due to an issue),那么它会关闭整个计算机,因为poweroff
二进制文件的工作方式和权限暂停mechanic是在Linux和硬件上设计的。
为了正确关闭容器,您需要做的是退出入口点(shell中的exit
),或向此过程发送信号(例如:docker stop
发送{{1}在经过一段时间的宽限期之后杀死它之前的运行入口点。)
如果你真的想从一个容器中关闭主机(你为什么要这样做?),你可以激活SIGTERM
选项,它将为容器内的root提供所有电源,然后做:
--privileged
小心,这将真正关闭主机,并以残酷的方式。在echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger
中编写1
将激活sysrq
内核功能,这允许使用SysRq key以及sysrq
文件向内核发出键盘请求。 sysrq-trigger
表示断电。
答案 1 :(得分:3)
您需要终止流程sh
,只需使用以下内容:
exit
从容器内部。将容器视为一个独立的进程,而不是虚拟机。