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

Tec*_*ain 7 macos bash 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
Run Code Online (Sandbox Code Playgroud)

我尝试将其放入一个循环中,以便在状态为 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
}
Run Code Online (Sandbox Code Playgroud)

Loo*_*ate 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 "";

Run Code Online (Sandbox Code Playgroud)


jef*_*nes 2

摘自/sf/answers/3419015211/,here\xe2\x80\x99s 是我在尝试让你的脚本工作时想出的脚本。检查 的退出curl是很棘手的,因为当 Docker 启动时,它会响应一个错误,但既然响应发生了,就curl认为它是 OK 并$status设置为 以外的值7

\n\n
#!/bin/bash\n\nwhile (! docker stats --no-stream ); do\n  # Docker takes a few seconds to initialize\n  echo "Waiting for Docker to launch..."\n  sleep 10\ndone\n\ndocker start $container\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n