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

7

我正在编写一个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个回答

8

以下是我使用的内容。这是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 "";


哦!很棒的改进。 - jeffbyrnes
最新的Docker更新似乎无法正常工作了。 - Richard Hpa
这在我的 M1 Mac 上完全正常运行。 - Nick
这在我的 M1 Mac 上完全正常运行。 - undefined
我的电脑在 printf "Starting Docker for Mac"; 这一行卡住了,直到我手动打开 Docker。 - Richard Hpa
找到了我的问题。原来如果你打开了资源节省模式,这个功能并不是百分之百有效,因为它是一个新的实验性功能。 - Richard Hpa

2
https://dev59.com/SFcP5IYBdhLWcg3wr8Hj#48843074中提取,这是我在尝试让您的脚本工作时想出来的脚本。检查curl的退出情况很棘手,因为当Docker启动时,它会响应一个错误,但由于响应发生,curl认为它是OK的,并且$status设置为一个值而不是7。请注意保留HTML标签。
#!/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

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

需要注意的是,这段话涉及IT技术相关内容。Original Answer翻译成"最初的回答"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接