【问题标题】:wait until docker start in Mac OS through shell script?等到docker通过shell脚本在Mac OS中启动?
【发布时间】:2019-06-26 18:14:54
【问题描述】:

我正在编写一个 shell 脚本,通过终端在 Mac 上安装 docker。我可以通过brew cask install docker 安装。现在它是基于 GUI 的 docker 等待用户事件继续。现在在我的 shell 脚本中,我想保持执行,直到 docker 启动并运行。我找到了一个很好的脚本来检查 docker 是否正在运行。我可以按如下方式进行检查。

#!/bin/bash

rep=$(curl -s --unix-socket /var/run/docker.sock http://ping > /dev/null)
status=$?

if [ "$status" == "7" ]; then
    echo 'not connected'
    exit 1
fi

echo 'connected'
exit 0

我已经尝试将它放入一个循环中,以便在状态为 0 之前它应该一次又一次地检查并保持异常。我没有编写 shell 脚本的经验,但尝试了一种运行方式,但没有成功。我怎样才能做到这一点。

我的脚本

#!/bin/bash

status=0

test() {
rep=$(curl -s --unix-socket /var/run/docker.sock http://ping > /dev/null)
status=$?
}

checkDocker() {
while [ "$status" == "7" ]
do
    echo waiting docker to start
    test
done
}

【问题讨论】:

    标签: bash macos shell docker


    【解决方案1】:

    来自https://stackoverflow.com/a/48843074/133479,这是我在尝试让您的脚本工作时想出的脚本。检查curl 的退出是很棘手的,因为在Docker 启动时,它会响应一个错误,但是由于响应发生,curl 认为它OK 并且$status 设置为@987654325 以外的值@。

    #!/bin/bash
    
    while (! docker stats --no-stream ); do
      # Docker takes a few seconds to initialize
      echo "Waiting for Docker to launch..."
      sleep 10
    done
    
    docker start $container
    

    但是,需要考虑的一点是,这最终会产生输出,因此您可能希望处理它。

    【讨论】:

      【解决方案2】:

      这是我使用的。这是对 jeffbymes 答案的修改。而不是打印错误消息并在重试之间等待 10 秒,这只是打印一条带有省略号的漂亮消息,该省略号每秒增长一个点,直到 Docker 准备好。

      #!/bin/bash
      
      printf "Starting Docker for Mac";
      
      open -a Docker;
      
      while [[ -z "$(! docker stats --no-stream 2> /dev/null)" ]];
        do printf ".";
        sleep 1
      done
      
      echo "";
      
      

      【讨论】:

      • 哦!不错的进步??
      猜你喜欢
      • 2011-05-27
      • 2015-11-05
      • 2017-04-07
      • 2016-12-03
      • 2018-01-08
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多