docker-composeでコンテナをビルドしていると、起動順は制御できるが、起動したらすぐに指定されたコマンドが叩かれてしまう。
具体的にはDjangoをdocker-composeで構築していた時にDBコンテナが起動し終わった後に
python manage.py migrate
を叩いてほしかった。
docker-compose.ymlにそのまま書いてしまうとDBコンテナが立ち上がりきっていないので、エラーになってしまう。
そこで、DBコンテナと疎通できるまで待ってもらうようにしたい。
DBコンテナが起動し終えるまで待機
最初に試したこと
DjangoのカスタムコマンドでDBコンテナと疎通確認してもらおうとした。
しかし、疎通していないとmanage.pyがこけてしまうので断念。
実際に動作した方法
bashファイルを作成してnetcatを使って疎通確認してもらうように変更。
実際のbashファイルはこんな感じ
#!/bin/ash
until nc -z db 3306; do
>&2 echo "mysql is unavailable - sleeping"
sleep 3
done
>&2 echo "mysql is up - executing command"
exec $@
これを、migrateする前に実行しておけばOK
注意点
ビルドする際にnetcatをインストールしておく必要があります。
コメント