2017-02-24 978 views
4

我有一個wait-for-it腳本添加到我的docker映像中,並在docker-compose中執行它。它工作正常,在此設置:在docker-compose中執行wait-for-it腳本的正確方法

在泊塢窗 - 撰寫:

entrypoint: ./wait-for-it.sh mysql 

所述等待,它的腳本:

...checks 
>&2 echo "MySQL is up - executing command" 
exec ../../../entrypoint.sh npm start 

命令輸出,當我執行docker ps是:

COMMAND 
"./wait-for-it.sh ..." 

這工作正常,但我不喜歡'設置'。 我希望wait-for-it.sh被執行,如果成功,我想去我的dockerfile的ENTRYPOINT + CMD。我不想從我wait-for-it.sh內開始我的入口點硬編碼

所以我改變了我的wait-for-it.sh腳本:

>&2 echo "MySQL is up - executing command" 
exec "[email protected]" 

裏面我dockerfile我有:

ENTRYPOINT ["/entrypoint.sh"] 

EXPOSE 2368 
CMD ["npm", "start"] 

如何我的搬運工,compose.yaml需要尋找一個正確的方式我等待換它腳本執行後,執行此?

所以我想,當我執行docker ps得到這個輸出:

COMMAND 
"/entrypoint.sh np..." 

我想這樣的事情在我docker-compose.yaml但沒有奏效:

entrypoint: ./wait-for-it.sh mysql /entrypoint.sh 
    command: ["npm", "start"] 

回答

-1

您將使用腳本一樣, ;

#!/usr/bin/env bash 

while true; do 
    if which "$1" >/dev/null; then 
     echo exists 
     break 
    else 
     echo does not exist 
     // sleep 3 seconds 
     sleep 3 
    fi 
done 
+0

我的腳本有效。我也做了類似'until ...'的工作還沒有完成,當它工作時,它會跳到我的執行。這只是碼頭工人的設置,我不知道。我現在正在執行我的等待作爲入口點並開始我的真實入口點硬編碼 – DenCowboy