Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 等待docker通过shell脚本在Mac OS中启动?_Bash_Macos_Shell_Docker - Fatal编程技术网

Bash 等待docker通过shell脚本在Mac OS中启动?

Bash 等待docker通过shell脚本在Mac OS中启动?,bash,macos,shell,docker,Bash,Macos,Shell,Docker,我正在编写一个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 > /d

我正在编写一个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
}
这是我在试着让你的剧本开始工作时想到的剧本。检查
curl
的退出是很棘手的,因为Docker启动时,它会响应错误,但由于响应发生,
curl
认为它正常,
$status
设置为
7
以外的值

#/bin/bash
而(!docker stats--无流);做
#Docker需要几秒钟来初始化
echo“等待Docker启动…”
睡眠10
完成
docker start$容器

然而,要考虑的是,这最终会有输出,所以你可能希望处理这个问题。

< P>这就是我所使用的。这是对杰弗里姆斯答案的修改。相反,打印错误消息并在重试之间等待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 "";

哦!很好的改进