2017-09-04 17 views
0

我有三個服務(db,app1,app2)和兩個虛擬機(dockervm1,dockervm2)。使用swarm模式,我在vm2上生成了db和app1,而在vm2上生成了app1。協調在羣模式下啓動容器

db容器啓動時,它會創建一個數據庫。現在我想在創建數據庫並填充數據後啓動服務app1和app2。我嘗試將db設置爲app1和app2的依賴項。但是,一旦容器啓動,db容器就被視爲創建,而不是在創建實際數據庫時創建。所以app1和app2在db創建後不久就會開始。

有沒有辦法告訴碼頭考慮db容器啓動後才創建所有必要的表? 有沒有一種方法,db容器可以創建一個文件來表示它已完成創建表並使文件可用於app1和app2,即使它們位於不同的虛擬機上?

回答

0

一個解決方案是在您的應用容器中使用一個循環,直到數據庫可用爲止。例如,像:

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

只有啓動while循環退出後的應用程序。

或者,如果您是應用程序開發人員,只需在應用程序本身中包含必要的重試邏輯即可。

相關問題