首页 文章

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

提问于
浏览
4

我有一个 wait-for-it 脚本添加到我的docker镜像中,我在docker-compose中执行它 . 它适用于此设置:

在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 ..."

这工作正常,但我没有't like the '设置' . 我希望 wait-for-it.sh 被执行,如果成功,我想去我的dockerfile的 ENTRYPOINT 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"]

在执行wait-for-it脚本后,我的docker-compose.yaml如何以正确的方式执行此操作?

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

COMMAND
"/entrypoint.sh np..."

我在_2742854中尝试了类似的东西,但是没有用:

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

1 回答

  • -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
    

相关问题