我正在编写一个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
}
答案 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
但是,要考虑的一件事是它最终会输出,因此您不妨处理一下。