
這個確切的問題之前已經被問過這裡就這樣和在 Reddit 上。然而,真正的問題從未得到解答。
我的 Atlassian 服務在 Docker 容器內運作。但是,我想知道當我發出shutdown
命令時會發生什麼主人。它是嘗試正常關閉容器,還是嘗試立即殺死它們?不知何故,我似乎無法找到這方面的實際資源,也許是因為我對 docker 相當陌生。
想像以下情況:
- 我有正在運行的容器
- 我發出
shutdown
關閉命令主人 沒有明確發布docker stop
在這種情況下docker會做什麼呢?我可以安全地發出shutdown
命令,並期望我的容器在執行其他操作之前先正常關閉嗎?
就我而言,如果重要的話,我使用 Ubuntu Server 19.04 實例,但問題是針對更一般的場景/涵蓋主要發行版。
答案1
您的容器應該像系統中的所有其他進程一樣接收 SIGTERM。
問題是,獲得 SIGTERM 的是容器中的主程序(由 ENTRYPOINT 啟動的程序)。如果容器運行腳本來啟動二進位文件,那麼對於二進exec
位檔案來說,使其成為容器進程很重要,否則 shell 解釋器會收到 SIGTERM,而 shell 解釋器通常不會將其轉發給子進程。
AFAIKdocker stop
首先在容器上嘗試 SIGTERM,並期望它在 10 秒內退出,如果沒有,它會發送 SIGKILL。因此,如果你的容器很快就停止,docker stop
你應該沒問題。
答案2
有理論方法(由@xenoid)和實踐方法。
發出伺服器關閉命令,並觀察會發生什麼情況。
控制台。雖然網路可以立即切斷,但關閉過程可能仍需要相當長的時間。從控制台(一些託管提供者提供虛擬控制台)觀察它是如何進行的 - 關閉序列實際需要多長時間,同時會發生什麼?
紀錄.據我所知,資料庫容器常常令人擔憂。它會被殺死,還是優雅地終止?真相就在日誌中。仔細觀察它們。如果您啟動系統並看到這些帶有關閉時間戳記的日誌,則表示您做得很好:
。
2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
- 關機定時配置。您也可以進一步研究如何變更重新啟動計時參數。請參閱
man systemd-system.conf
並檢查此段落:DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=
。預設值為 90 秒。