从 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 stop
将 SIGTERM
发送到 运行 入口点,然后在宽限期后将其杀死)。
如果你真的想从一个容器中关闭主机(你为什么要这样做?),你可以激活 --privileged
选项,这将在容器中为你的根提供所有权力容器,然后执行:
echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger
小心,这会真的 关闭主机,而且是一种残酷的方式。在 sysrq
中写入 1
将激活 sysrq
内核功能,这允许使用 SysRq key 以及通过 sysrq-trigger
文件向内核发出键盘请求。 o
表示关机。
我正在尝试从 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 stop
将 SIGTERM
发送到 运行 入口点,然后在宽限期后将其杀死)。
如果你真的想从一个容器中关闭主机(你为什么要这样做?),你可以激活 --privileged
选项,这将在容器中为你的根提供所有权力容器,然后执行:
echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger
小心,这会真的 关闭主机,而且是一种残酷的方式。在 sysrq
中写入 1
将激活 sysrq
内核功能,这允许使用 SysRq key 以及通过 sysrq-trigger
文件向内核发出键盘请求。 o
表示关机。