Dockerの/var/run永続性

Dockerの/var/run永続性

次のように構成された(Debian)DockerコンテナのPIDファイルで問題が発生しました。--restart always

問題をまとめてみてください。

  1. apache2コンテナからサービスを開始します。 init サービスは PID ファイルを生成します。/var/run/apache2/apache2.pid
  2. 私のdocker killコンテナがホストの不適切なシャットダウン(電気的故障)をシミュレートし、サービスが異常終了したため、PIDファイルはまだ存在していました。
  3. コンテナを再起動し(ホストの再起動シミュレーション)、apache2サービスを再起動してみました。 PIDが再利用されると(他のプログラムがhttpdが実行されているPIDを使用している場合)、サービスの起動は失敗します。

サービスを正しく開始するには、次の手順を実行する必要があります。

  1. 運が良ければ、リサイクルされたPIDが公開されます。
  2. PIDファイルを手動で削除

明らかに、解決策1は解決策ではありません。

解決策2は何度も言及されていますが、コンテナから始まるすべてのサービスに対してエントリポイントまたはcmdでこれを行うことに関連しているので、私の考えでは解決策ではありません。また、特定の画像がPIDファイルを使用しますが、仮定が正しくない可能性があることも知っています。

いくつかの改善点を見ることができます。

  1. /var/run揮発性(tmpfs)またはOSの起動時にクリーンアップされ、コンテナの起動時にすべてをrmできます(すでに特定のPIDファイルを削除するよりも優れています)。
  2. /var/run次へインストール一時ファイルシステムコンテナの起動時にクリーンアップされるようにコンテナを作成するとき

tmpfsソリューションは私にとって完璧に動作するようです(本当ですか?)。したがって、これをすべてのコンテナ配布(docker、docker composeなど)に適用できる体系的なソリューションがあるのか​​、欠点があるのか​​疑問に思います。毎回?なぜなら、私の考えでは、これをすべてのコンテナ配布に永久に適用する必要があり、可能であれば明示的にこれをやりたくないからです。

関連情報