2017-09-04 1 views
0

私は3つのサービス(db、app1、app2)と2つのVM(dockervm1、dockervm2)を持っています。私はswarmモードを使ってdbとapp1をvm1に、app2をvm2に作成しました。集合モードでのコンテナの起動の調整

dbコンテナが起動すると、データベースが作成されます。今度は、dbが作成され、データが入力された後に、サービスapp1とapp2を開始したいと考えています。私はapp1とapp2の依存関係としてdbを設定しようとしました。ただし、dbコンテナは、コンテナが起動するとすぐに作成され、実際のデータベースが作成された時点では作成されないとみなされます。したがって、app1とapp2はdbの作成直後に実行されます。

dockerには、必要なすべてのテーブルの作成が完了してからdbコンテナが起動すると考えるように指示する方法はありますか? dbコンテナは、テーブルの作成が完了したことを通知するファイルを作成し、異なるVM上にある場合でもapp1とapp2にファイルを利用できるようにする方法はありますか?

答えて

0

解決策の1つは、データベースが利用できるようになるまで繰り返すアプリコンテナー内のスクリプトを使用することです。例えば、のようなもの:

while ! mysql -u dbuser -p secretpassword -e 'select 1 from sometable' mydb; do 
    sleep 1 
done 

のみwhileループ終了後にアプリケーションを起動します。

また、アプリケーション開発者の場合は、アプリケーション自体に必要な再試行ロジックを含めるだけです。

関連する問題