使Docker容器一直运行,同时能够优雅地停止

12

我正在尝试创建一个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事件。有什么办法可以解决这个问题吗。

2个回答

5
你可以在Dockerfile中考虑使用(使用docker 1.9+)STOPSIGNAL

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

但是对于管理此类信号的脚本,请参见 "在Docker容器中捕获信号" 及其 program.sh 来协调其他非PID1进程。

3

使用以下命令行参数启动容器:-t-i

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

这将允许您使用 ctrl+c 退出。

有关更多信息,请参见此Docker问题


2
我会在末尾添加 _/bin/bash_,这样它就会打开 Bash 命令行界面。 - kimy82
我正在使用 Docker 版本 17.05,-it 选项与 Ctrl + C 一起使用,即容器 shell 等待直到输入 Ctrl + C。一旦输入,容器进程就会退出。这是由于在选项中使用了 -i,使容器进程的 STDIN 打开。在输入 Ctrl + C 后,while 循环退出,容器进程也随之终止。 - Binita Bharati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接