2017-04-19 5 views
0

をメインプロセス(PID 1)として実行しているDockerコンテナーがあります。また、Dockerコンテナでsystemdユニットを介してワーカープロセスを開始しました。私たちのDockerコンテナはCentOS 7.2を使用しています。 Docker 停止タイムアウトを設定して、Dockerコンテナ内で実行されるワーカープロセスの正常なシャットダウンを処理できるようにしました。 Dockerコンテナを停止すると、コンテナ内でPID 1で実行されているsystemdプロセスに対してSIGTERMが受信されたことがわかります。またコンテナは、私たちが設定した停止タイムアウトを待ちます。 systemdプロセスは、systemdユニットを使用して開始したワーカープロセスにこのSIGTERMを転送していません。 ログから、systemdがSIGTERMを受け取ったときのように、自身を再実行しようとします。 KillMode = mixedを私たちのsystemdユニットファイルに追加しようとしましたが、うまくいきませんでした。PID 1のドッキング・コンテナーでsystemdプロセスが実行されない理由ドッカー停止時に子プロセスにSIGTERMを転送しない

systemdプロセスから子プロセスにSIGTERMを転送する方法はありますか?

+0

は役に立ちます:https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html –

+0

共有記事からは、通常のシステムのinit case)はSIGTERMを子プロセスに転送できるはずですが、これは私たちの場合には起こりません。私たちはセットアップのためにsystemdを使いたいと思っています。 systemdから子プロセスにシグナルを渡す方法を探しています。 – Sachin

答えて

-1

ドッカーの実行コマンドを貼り付けてください。

これらの2つのオプションを追加する必要があります。

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

systemd自体を実行する代わりに、同様の機能を提供する置換えを試すこともできます。コンテナのエントリポイントとしてdocker-systemctl-replacementを入力すると、指定したシステムファイルが検索されます。コンテナの起動時にユニット記述子からExecStartが実行され、SIGSTOPを受け取ると、ユニット記述子のそれぞれからExecStopが実行されます。とにかくそれがあなたが望む機能のように聞こえる。

関連する問題