我正在shell脚本中运行服务器并运行一些docker命令。但是,某些命令在docker 1.7版中失败。我有1.7的修复,但如果我一直使用它,运行shell脚本需要更长的时间。所以我想检查那个版本,如果它是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
显然这不起作用。有什么想法吗?
答案 0 :(得分:0)
您可以使用:
if [[ $(ssh -l root "$1" 'docker -v') == *" 1.7."* ]]; then
echo 'Docker version 1.7!'
else
echo 'Docker version not 1.7!'
fi
ssh
$(...)
命令的输出
==
或=
,但不支持===
答案 1 :(得分:0)
Docker有一个-H选项,允许您指向另一台主机上的docker引擎。使用它来获取版本并确定要运行的内容。
if [[ $(docker -H my.host version | grep '1.7') ]]; then
Thing 1
else
Thing 2
fi
答案 2 :(得分:0)
也许,有时需要检查版本范围。 作为可能的解决方案:
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