Docker Redis容器有序关闭

时间:2015-04-06 05:47:43

标签: redis docker ubuntu-14.10

我在Ubuntu 14.10 x64上的Docker容器中运行redis-server。如果我通过phpRedisAdmin访问redis数据库,做一些编辑,然后将它们保存到磁盘,关闭容器然后重新启动它一切都很好 - 编辑的redis键存在且正确。但是,如果我编辑密钥然后关闭容器然后重新启动它,编辑不会粘。

显然,当容器关闭时,不会自动保存dump.rdb文件。我想我可以通过放入/etc/rc6.d中符号链接的/etc/init.d脚本来解决这个问题。但是,我想知道 - 为什么关闭一个redis容器没有执行容器中正在运行的进程的有序关闭?毕竟,当我重新启动我的服务器(服务器和容器运行Ubuntu 14.10)时,我不必将redis db更改显式提交到磁盘。

1 个答案:

答案 0 :(得分:2)

当您运行SIGTERM时,Docker容器中的主进程将发送docker stop -t N CONTAINER信号。然后,该过程应该开始干净地关闭自己。如果在N秒(默认为10)之后仍然没有发生这种情况,Docker将使用SIGKILL信号,这将终止进程而不给它机会清理。你遇到问题的原因可能是因为你根本没有给予Redis足够长的时间来干净地关闭。

重要的是要注意只有容器中的主进程(PID 1)才会发送信号。这意味着主进程必须负责关闭容器中的所有子进程,否则您最终可能会遇到僵尸进程。

如果你仍然遇到redis没有在关机时做你想做的事情的问题,你可以把它包装在充当PID 1的脚本中,捕获SIGTERM信号并做任何你想要的整理(只是确保你关闭redis和你已经启动的任何其他进程)。