【问题标题】:Correct way to execute wait-for-it script in docker-compose在 docker-compose 中执行 wait-for-it 脚本的正确方法
【发布时间】:2017-02-24 08:39:09
【问题描述】:

我在我的 docker 镜像中添加了一个 wait-for-it 脚本,并在我的 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 ..." 

这很好用,但我不喜欢“设置”。 我希望 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"]

在执行等待它的脚本后,我的 docker-compose.yaml 需要如何以正确的方式执行此操作?

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

COMMAND
"/entrypoint.sh np..."

我在docker-compose.yaml 中尝试过类似的操作,但没有奏效:

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

【问题讨论】:

    标签: docker docker-compose


    【解决方案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
    

    【讨论】:

    • 我的脚本有效。我也做类似until ...'works not yet' done 的事情,当它工作时它会跳到我的执行官那里。这只是 docker compose 中的设置,我真的不知道。我现在正在执行我的等待作为入口点并开始我真正的入口点硬编码
    猜你喜欢
    • 2020-11-21
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2021-04-30
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多