docker-composeでコンテナが起動しない


通常、docker-compose up をすれば、docker-composeで指定されたサービスに紐付くコンテナが起動すると思います。
ところが、なぜかdocker-compose upでコンテナが起動しても、すぐに落ちてしまうことがありました。
具体的には下記のような状態になります。

$ docker-compose up 
Name   Command   State   Ports
------------------------------
test   /bin/bash exit 0

しかし、下記のようにdocker run では起動できる。
※このdocker-composeではDockerfileをbuildするようにしていた。

$ docker run --name test -ti centos:latest /bin/bash

分かる人にはこれだけみてすぐわかる方もいると思いますが、docker初心者の私はしばらくわからず色々調べてやっと解決することができました。

参考サイト

docker-compose.ymlの対象のコンテナに下記を追加してあげるだけでした。

tty:true

要は/bin/bashを実行しているので、ttyを割り当てないと、継続して起動できないということでした。
確かにdocker run では-t つけてた…。

docker runのリファレンスにも同様のことが記載されていて、

(シェルのような)インタラクティブなプロセスでは、コンテナのプロセスに対して tty を割り当てるために、 -i -t を一緒に使う必要があります。

たしかに、なるほど。という気持ちでした。
この辺はいつも意識しないので、言われてみればそうかという感じです。
こうやってDockerの癖みたいのがわかってくると、かなり楽しいです。

また、一つDockerの気持ちが少しわかった日でした。