2017-04-19 30 views
0

我們有運行的Docker容器作爲主進程(PID 1)。我們還通過systemd單元在Docker容器中啓動了我們的工作進程。我們的Docker容器使用CentOS 7.2。 我們已經配置了Docker 停止超時,以便我們可以處理在Docker容器內運行的工作進程的正常關閉。 當我們停止Docker容器時,我們可以看到SIGTERM被接收到了容器內運行PID 1的systemd進程。容器也等待我們配置的停止超時。 但是systemd進程沒有將這個SIGTERM轉發給我們已經開始使用systemd單元的工作進程。 從日誌看來,它看起來像systemd收到SIGTERM它試圖重新執行自己。我們嘗試在我們的systemd單元文件中添加KillMode = mixed,但它不適用於我們。爲什麼systemd進程在PID 1的docker容器中運行,未將SIGTERM轉發到docker stop上的子進程

有什麼辦法可以將SIGTERM從systemd進程轉發到子進程?

+0

可能是一個有用的閱讀:https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html –

+0

從共享的文章,它看起來像普通的系統init(systemd在我們案例)應該能夠將SIGTERM轉發給子進程,但這在我們的例子中確實不會發生。我們想要使用systemd來進行設置。尋找將信號從systemd傳遞給子進程的方式。 – Sachin

回答

-1

請粘貼您的碼頭運行命令。我想你不得不添加這2個選項。

--stop-signal=SIGRTMIN+3 --env container=docker 
0

除了運行systemd本身,您還可以嘗試使用提供類似功能的替換。如果將docker-systemctl-replacement作爲容器的入口點,那麼它將查找您提供的systemd單元文件 - 在容器啓動時,它會從單元描述符運行ExecStart,並在接收到SIGSTOP後會從每個單元描述符運行ExecStop。聽起來這就是你想要的功能。

相關問題