使docker容器永远运行,同时能够优雅地停止

时间:2016-11-15 11:17:58

标签: bash docker dockerfile

我正在尝试创建一个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 个答案:

答案 0 :(得分:4)

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

  

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

但对于管理此类信号的脚本,请参阅" Trapping signals in Docker containers"及其program.sh来协调其他非PID1流程。

答案 1 :(得分:3)

使用以下标志启动容器:-t& -i

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

这样您就可以使用ctrl+c

退出

有关详细信息,请参阅此docker issue