0
0

javaでコンテナ作るときに気を付けるべきこと

Last updated at Posted at 2024-01-08

※この記事は数行で終わります

javaはsignalを認識できない

signalとはCtrl+Cなどを押したときにシステム側が反応し、ソフトウェアに割込み処理を行わせるものです。

dockerでは

コンテナ終了時に内部アプリケーション(コンテナ内のpid1)にシグナルを発報します。10秒間(デフォルト)応答がなければ強制終了します。

つまり

javaアプリケーションに対しては最初から強制終了を行うか、シグナルを文字列に変えてコマンドとして送るかとか考えないといけないのです。

補足

ここまでの成り行きを説明します。

  1. マイクラサーバー立てたるかー
  2. docker使お
  3. 起動時にシェルスクリプトでバックアップ取るか
  4. あれ?正常に終了できないしログも出ない
  5. pid1問題があるのか
  6. 軽量init使いたくないなめんどそ
  7. webguiによるマネージャ...めんどくさそ
  8. execコマンドを知る(すべての元凶)
  9. おお、ログが出てきた!
  10. 完成や!おまいらは入れ
  11. (1か月後)
  12. プラグイン更新するからサーバー閉じるか
  13. 終わったから起動するか
  14. 友「縦もん消えてんだが」
  15. え? うせやろ

その後、原因を究明した結果が以上のこととなります。
なお、ctrl+cでは終了処理が行われてたので、これはctrl+cが押されたことを認識し、signalが発報されたことを認識してないと結論付けました。

その後

軽量initでも解決しなさそうと思ったので、自作することにしました

[minecraft]pid2 <=> [ここを作る]pid1 <=> [Docker]

できたら報告します。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0