以前の記事 で、CMD
を使って Hubot を起動することで、docker run -d
時にコンテナを立ち上げるとともに Hubot が動くようになった。
しかしこの方法の場合、Hubot が何らかの時間のかかるタスクを実行すると、Hubot からの ping が帰ってこなくなって Slack とのコネクションが切られてしまう。そうすると、CMD
で実行した Hubot の起動コマンドも終了することになり、結果コンテナも止まってしまうことになる。
forever
npm にある、コマンドを裏で実行し続けてくれるコマンド。これを使って以下のようにすると、Hubot が永続的に実行される。
forever でハマるポイントはここにまとまっている(http://qiita.com/kacky69/items/ee806b8c17bbd70ca55e)。
$ forever start -c coffee node_modules/.bin/hubot -a slack
ただし、forever は実行したいコマンドをバックグラウンドプロセスに回すだけで、このままではコマンドは正常終了してしまう。
つまり、CMD
にこの文を突っ込んでも、コンテナ起動後にすぐ停止してしまう。
tail -f
そこで、CMD
のコマンドの最後にtail -f something
を入れる。
CMD forever start -o out.log -r err.log -c coffee node_modules/.bin/hubot -a slack; tail -f out.log
これでtail -f
がフォアグラウンドになるので、docker run -d
後もコンテナが起動したままになってくれる。