【发布时间】:2015-06-10 12:55:52
【问题描述】:
我在 Ubuntu 14.10 x64 上的 Docker 容器中运行 redis-server。如果我通过 phpRedisAdmin 访问 redis 数据库,进行一些编辑,然后将它们保存到磁盘,关闭容器然后重新启动它一切都很好 - 编辑的 redis 密钥存在且正确。但是,如果我编辑键然后关闭容器然后重新启动它,编辑不会坚持。
显然,dump.rdb 文件不会在容器关闭时自动保存。我想我可以通过放入一个从 /etc/rc6.d 符号链接的 /etc/init.d 脚本来解决这个问题。但是,我想知道 - 为什么关闭 redis 容器不会有序关闭容器中正在运行的进程?毕竟,当我重新启动服务器时(服务器和容器都运行 Ubuntu 14.10),我不必将 redis db 更改显式提交到磁盘。
【问题讨论】:
-
如何停止容器?
-
通过发出
docker stop -t 0 containerid。自从发布此问题以来,我发现的一件事是,在 Docker 容器中通常不会发生 rullevel 处理。 -
如果你这样做
-t 0你是说在发出 sigkill 之前给它 0 秒,这不会给它时间自己整理。而是删除该参数或增加到-t 30或其他内容。另外,redis pid 1 - 是否正确代理了信号? -
谢谢,我会试试的。但是 - 也许你知道:如果 Docker 容器不运行 /etc/rc6.d 中通常的运行级别脚本链接,那么 -t 30 (或其他)会有什么好处,因为无论如何都没有运行关闭脚本?
-
你需要了解unix信号。 docker 容器中通常有 1 个进程,当您运行 docker stop 时,它将收到一个 SIGTERM,并自行关闭。如果它没有关闭,docker 将使用 SIGKILL 杀死它。如果容器中有多个进程,则由父进程关闭子进程。
标签: redis docker ubuntu-14.10