2017-04-01 88 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