【问题标题】:Stop a docker container from within an alpine image从高山映像中停止 docker 容器
【发布时间】: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

你知道这是什么问题吗?

【问题讨论】:

    标签: docker alpine


    【解决方案1】:

    您不能以这种方式停止 docker 映像。

    首先,如果poweroff 必须运行(过去确实如此,due to an issue),它将关闭整个计算机,因为poweroff 二进制文件的工作方式和电源停止机制是在 Linux 上设计的,并且硬件。

    要正确关闭容器,您必须退出入口点(shell 中的exit),或向此进程发送信号(例如:docker stopSIGTERM 发送到之前正在运行的入口点经过一段时间的宽限期后将其杀死)。

    如果您真的想从容器中关闭主机(为什么要这样做?),您可以激活--privileged 选项,该选项将为您在容器中的根提供所有电源,然后做:

    echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger

    小心,这真的会以残酷的方式关闭主机。在sysrq 中写入1 将激活sysrq 内核功能,它允许使用SysRq key 以及通过sysrq-trigger 文件向内核发出键盘请求。 o 表示关机。

    Fedora Project - Sysrq

    【讨论】:

    • 谢谢@Fabien。你知道是否可以从docker exec 发送这个SIGTERM 吗?
    • 可以,你只需要知道入口点的PID或程序名,然后使用kill
    【解决方案2】:

    您需要终止进程sh,只需这样做:

    exit
    

    从容器内。将容器视为一个孤立的进程,而不是虚拟机。

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2020-06-05
      • 2019-04-01
      • 1970-01-01
      相关资源
      最近更新 更多