【问题标题】:in ssh shell script check for docker version在 ssh shell 脚本中检查 docker 版本
【发布时间】:2019-12-11 21:44:57
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: shell ssh docker


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      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 支持== 或=,但不支持===
      • 将全局字符保留在引号之外

      【讨论】:

        【解决方案3】:

        Docker 有一个 -H 选项,允许您指向另一台主机上的 docker 引擎。使用它来获取版本并确定要运行的内容。

        if [[ $(docker -H my.host version | grep '1.7') ]]; then
            Thing 1
        else
            Thing 2
        fi
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-02
          • 2017-12-16
          • 2018-08-05
          • 2014-03-31
          • 1970-01-01
          • 2017-03-25
          • 2013-01-05
          • 1970-01-01
          相关资源
          最近更新 更多