【问题标题】:Make docker container run forever while being able to gracefully stop让 docker 容器永远运行,同时能够优雅地停止
【发布时间】:2016-11-15 11:17:58
【问题描述】:

我正在尝试创建一个 docker 容器。它应该在后台永远运行。但是每当我按下 Ctrl+C 或 docker stop 时,它应该会关闭而不会浪费更多时间。

我当前的代码

#RUN trap 'echo $excode' EXIT HUP INT QUIT PIPE TERM
ENTRYPOINT while :; do read; done
#ENTRYPOINT trap "exit 1" SIGTERM SIGHUP && tail -f /dev/null & wait && exit 0

我可以让它永远运行,但由于某种原因我的脚本没有接收到 TRAP 事件。任何线索如何解决这个问题。

【问题讨论】:

    标签: bash docker dockerfile


    【解决方案1】:

    您可以考虑在您的 Dockerfile 中使用(使用 docker 1.9+)STOPSIGNAL

    STOPSIGNAL 指令设置系统调用信号,该信号将发送到容器以退出。
    该信号可以是与内核系统调用表中的某个位置匹配的有效无符号数字,例如 9,或者是 SIGNAME 格式的信号名称,例如 SIGKILL。

    但对于管理此类信号的脚本,请参阅“Trapping signals in Docker containers”及其program.sh 以编排其他非 PID1 进程。

    【讨论】:

      【解决方案2】:

      使用标志启动您的容器:-t & -i

      docker run -it --name=<container_name> <image>:<tag>
      

      这将使您能够使用ctrl+c退出

      请参阅此docker issue 了解更多信息。

      【讨论】:

      • 我会在末尾添加 /bin/bash 然后它会打开 bash 命令行。
      • 我使用的是 docker 17.05 版本,-it 选项与 Ctrl + C 一起使用,即容器外壳等待直到输入 Ctrl + C。一旦输入,容器进程退出。这是由于在选项中使用了 -i 使容器进程的 STDIN 打开。输入 Ctrl +C 时,while 循环退出,容器进程也随之死亡。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2018-09-08
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多