はじめに
私がDockerで初めて作業した時につまずいた事象なので、共有させていただきます。
また、詳しい障害切り分けができていません。
初心者のため間違い等ございましたらアドバイス等よろしくお願いいたします。
Dcckerコンテナ内での作業をしようとすると
$ docker-compose up -d
$ docker-compose exec <サービス名> bash
本来であれば、上記のコマンドで正常にコンテナ内へSSH接続できて作業できるはず。
しかし、SSH接続が急に終わってしまい接続できない状況。
とりあえず、実行中のプロセスを確認することにしました。
$ docker-compose ps
Name Command State
----------------------------------------------------------
pompom_mysql_1 docker-entrypoint.sh Up
mysqld
pompom_pompom_1 prehook bundle install Exit 1
-j3 ...
pompom_redis_1 docker-entrypoint.sh Up
redis ...
ん?本来Stateが「UP」になるところが「Exit 1」となっている!
どうやらこのサービスが上手く動いていないことが原因のようです。
より詳しい原因切り分けのため、
docker-compose logs
でpompom_1
に該当するエラーを探してみたが分からない状態に(汗
最終手段として、一度ボリュームを綺麗に掃除して立ち上げて見てみることに。
#コンテナのサービスを停止・イメージやボリュームを削除
$ docker-compose down
#不要ボリューム等の一括削除
#docker system pruneではボリュームまでは削除してくれない
$ docker system prune --volumes
#起動前にイメージを構築してから、コンテナを作成し起動する
$ docker-compose up --build
しばらく構築処理が実行されるのを待ち、
再びSSH接続を試みると全て「UP」の状態になりました。
$ docker-compose ps
Name Command State
----------------------------------------------------------
pompom_mysql_1 docker-entrypoint.sh Up
mysqld
pompom_pompom_1 prehook bundle install Up
-j3 ...
pompom_redis_1 docker-entrypoint.sh Up
redis ...
結論
今までできていたDockerの処理に不具合が発生した場合は、
docker-compose ps
やdocker-compose logs
で障害切り分けをしてみる。
私の場合、調べても障害の原因・切り分けができなかったため、
とりあえずという感覚で(本当はいけない行為だと思います)
最終手段としてボリュームを削除して再構築してみて、現象改善しました。
ボリュームの圧迫や何かの動作がキッカケでコケていたのだと考えます。
また、Dockerfile.dev
等に修正点があるのかもしれません。
これからも、修正するべき点を探していきます。
同じような障害で作業が止まっている方の解決につながればと思います。