2017-04-01 59 views
0

我想在本地dev的Docker中使用Elasticsearch。虽然我可以找到可以工作的容器,但在发送docker stop时,容器会暂停10秒,然后docker强行杀死容器。我的假设是,ES不是在PID 1上,或者其他服务不能立即关闭。Elasticsearch码头停止似乎忽略SIGKILL

我很好奇,如果任何人都可以在此扩大,或解释为什么这更准确地发生。我正在运行大量测试,而其他容器在1-2s后关闭时,10s +关闭只是令人讨厌。

回答

1

如果您不想等待10秒,则可以运行docker kill而不是docker stop。您还可以使用-t选项(例如,)调整docker stop上的超时时间。 docker stop -t 2 $container_id只需等待2秒钟,而不是默认的10秒。

至于为什么忽略sigkill,这可能取决于您运行的图像(弹性搜索有多个图像)。但是,如果pid 1是像/ bin/sh或/ bin/bash这样的shell,它不会传递信号。如果pid 1是elasticsearch过程,它可能会忽略信号,或者10秒可能不足以完全清除和关闭。

+0

谢谢。是的,看起来这是一个困扰每个ES镜像的问题,我认为它与清理时间有关;大多数图像都有'CMD'设置为启动ES或Kibana。 '-t'似乎是最好的。 – Fluidbyte

+0

我看到的大多数图像都使用了json格式的'CMD'(用exec来启动而不是shell),如果这个'CMD'执行了shell脚本,脚本的最后一行是'exec'启动ES作为相同的PID。这两块是需要避免有一个外壳作为PID 1。 – BMitch