微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash:等待图像在 dockerhub 中可用

如何解决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

SECONDSbash 中的一个特殊变量,其值每秒有效递增一次。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?