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

时间:2019-02-02 09:51:24

标签: 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 > /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
}

2 个答案:

答案 0 :(得分: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 "";

答案 1 :(得分:1)

摘自https://stackoverflow.com/a/48843074/133479,这是我在尝试使您的文件正常工作时想出的脚本。检查curl的退出是很棘手的,因为在Docker启动时,它将响应并返回错误,但是由于响应已发生,因此curl认为可以,并且$status被设置为7以外的值。

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

但是,要考虑的一件事是它最终会输出,因此您不妨处理一下。