スポンサーリンク

docker-composeでコマンドのタイミングを制御してみた

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をインストールしておく必要があります。

参考サイト

もふチップス
スポンサーリンク
モフモフチップス

コメント