在docker-compose中执行wait-for-it脚本的正确方法

我有一个wait-for-it脚本添加到我的docker图像,我执行它在我的docker组成。 它适用于这个设置:

在docker-compose中:

 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被执行,如果成功,我想进入ENTRYPOINT +我的dockerfile的CMD 。 我不想在我的wait-for-it.sh中开始我的入口点硬编码

所以我改变了我的wait-for-it.sh脚本:

 >&2 echo "MySQL is up - executing command" exec "$@" 

在我的dockerfile里面我有:

 ENTRYPOINT ["/entrypoint.sh"] EXPOSE 2368 CMD ["npm", "start"] 

我的docker-compose.yaml在执行wait-for-it脚本后需要如何正确执行这个操作?

所以我想在执行docker ps时得到这个输出:

 COMMAND "/entrypoint.sh np..." 

我在docker-compose.yaml尝试了这样docker-compose.yaml但是没有成功:

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

你会用这样的脚本;

 #!/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