在SSH Shell脚本中检查Docker版本

4
我正在一个shell脚本中通过ssh登录服务器并执行一些docker命令。但是在docker版本1.7中,有些命令会失败。虽然我有一个针对1.7的修复方案,但如果每次都使用它,运行脚本所需的时间会更长。因此,我想检查该版本,如果是1.7,则退回到较慢的脚本。否则运行较快的版本。
思考如下:
if ssh -l root $1 "docker -v === '1.7.*'"
then
    echo "Docker version 1.7!"
else 
    echo "Docker version not 1.7!"
fi

显然这行不通。有什么想法吗?

3个回答

7

也许有时需要检查所需的版本范围。作为可能的解决方案:

SERVER_VERSION=$(docker version -f "{{.Server.Version}}")
SERVER_VERSION_MAJOR=$(echo "$SERVER_VERSION"| cut -d'.' -f 1)
SERVER_VERSION_MINOR=$(echo "$SERVER_VERSION"| cut -d'.' -f 2)
SERVER_VERSION_BUILD=$(echo "$SERVER_VERSION"| cut -d'.' -f 3)

if [ "${SERVER_VERSION_MAJOR}" -ge 19 ] && \
   [ "${SERVER_VERSION_MINOR}" -ge 0 ]  && \
   [ "${SERVER_VERSION_BUILD}" -ge 3 ]; then
    echo "Docker version >= 19.0.3 it's ok"
else
    echo "Docker version less than 19.0.3 can't continue"
    exit 1
fi

1

您可以使用:

if [[ $(ssh -l root "$1" 'docker -v') == *" 1.7."* ]]; then
    echo 'Docker version 1.7!'
else 
    echo 'Docker version not 1.7!'
fi
  • 你需要使用命令替换$(...)来获取整个ssh命令的输出
  • Shell支持===,但不支持===
  • 将通配符字符保留在引号之外

0
Docker有一个-H选项,允许您指向另一台主机上的docker引擎。使用它来获取版本并确定要运行的内容。
if [[ $(docker -H my.host version | grep '1.7') ]]; then
    Thing 1
else
    Thing 2
fi

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