如何解决Bash:等待图像在 dockerhub 中可用
我正在尝试创建一个 bash 脚本,如果存在,它将从 docker hub 下载图像,否则它将在退出前等待 5 分钟
#!/bin/sh
waitForDockerImage=0
res='Error response from daemon'
while [[ "${res}" == *"Error response from daemon"* ]]; do
echo $res
res=$(docker pull node/base-alpine:test)
echo $res
waitForDockerImage=$(($waitForDockerImage+10))
if [ $waitForDockerImage -gt 300 ];then
echo "waited for 5 mins,exiting Now.."
exit
else
sleep 1 # wait for 1 the second before check again
fi
done
此外,while 循环在第一次迭代中运行,但在第二次迭代中失败。 第二次运行
res=Error response from daemon: manifest for Error response from daemon: manifest for not found: manifest unkNown: manifest unkNown
所以我正在检查 res 是否包含 Error response from daemon
解决方法
错误响应写入标准错误,而不是标准输出。它第一次起作用是因为您手动设置了 res
,而不是未能从 docker
捕获标准错误。将循环中的赋值改为
res=$(docker pull node/base-alpine:test 2>&1)
更好的是,忽略标准错误并测试 docker pull
的退出状态。
i=0
while :;do
docker pull node/base-alpine:test 2>/dev/null && break
if [ "$i" -gt 300 ]; then
printf 'Waited 5 minutes,exiting now\n' >&2
exit 1
fi
i=$((i+1))
sleep 1
done
由于您使用的是 bash
,因此无需使用计数器作为代理即可轻松检查是否已过去 5 分钟。
SECONDS=0
while :; do
docker pull node/base-alpine:test 2>/dev/null && break
if (( $SECONDS > 300 )); then
printf 'Waited 5 minutes,exiting now\n' >&2
exit 1
fi
sleep 1
done
SECONDS
是 bash
中的一个特殊变量,其值每秒有效递增一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。