【问题标题】:How can I detect if docker for mac is installed?如何检测是否安装了 docker for mac?
【发布时间】:2016-11-08 12:03:49
【问题描述】:

我有一些makefiles,其中大多数东西应该在没有配置的情况下运行。这些 makefile 过去曾使用过docker-machine

如果用户使用的是 docker desktop for mac 而不是 docker-machine,有没有办法在 bash 中检测?

【问题讨论】:

  • 正如官方getting started instructions 中指出的那样,不再建议使用docker-machine,因为它需要VirtualBox,而Docker Desktop 则使用更快的 xhyve 并且不需要 VirtualBox 即可运行。考虑重构您的 makefile 以反映这一点。

标签: docker docker-machine docker-for-mac docker-desktop


【解决方案1】:

到目前为止我发现的最干净的方法是:

[[ $(docker version --format "{{.Server.KernelVersion}}") == *-moby ]]

【讨论】:

  • 轻微更新:18.03,KernelVersion 报告4.9.87-linuxkit-aufs,所以我猜可以检查*-linuxkit-*
【解决方案2】:

最好的方法是检查 DOCKER 环境变量是否存在:

  • DOCKER_HOST
  • DOCKER_MACHINE_NAME
  • DOCKER_TLS_VERIFY
  • DOCKER_CERT_PATH

所有这四个都是在运行eval $(docker-machine env) 时设置的,并且是与 docker-machine 一起使用所必需的。

测试版不需要设置它们中的任何一个,实际上需要您取消设置它们才能正常运行。


您还可以在docker info 命令中查找“moby”(mac VM 的 docker 名称):

docker info | grep -q moby && echo "Docker for mac beta" || echo "Not docker for mac beta"

不过,这将取决于docker info 结果的一致性。

【讨论】:

  • 是的,我正在考虑这个问题。但是,我更喜欢对“Docker for mac”的存在进行积极条件检查
  • @JE42 我也为此添加了另一项检查,这更积极。
【解决方案3】:

这些 makefile 过去曾使用过 docker-machine

如果可能,请停止使用机器。最近的 Docker for Mac installation instructions 请注意 Docker Toolbox,但建议它现在是 legacy。考虑重构您的脚本以检查 Docker Desktop:

if [[ -n "$(docker info --format '{{.OperatingSystem}}' | grep 'Docker Desktop')" ]]; then
    echo "Docker Desktop found. Skipping installation ..."
else
    echo "WARNING! Docker Desktop not installed:"
    echo "  * Install docker desktop from <https://docs.docker.com/docker-for-mac/install/>"
fi

说明

  • --format '{{.OperatingSystem}}' 是一个从 docker info 查询的 Go 模板。
  • grep 'Docker Desktop' 是您在运行 Docker Desktop 时应该寻找的。​​li>
  • 如果字符串的长度为 0(来自 man bash),-z 返回 true。
  • $(...) 是执行grep 而不输出到stdout 的命令替换。

Joe 的帽子提示 his answer 干净地过滤来自 docker info 的输出。如果您重构以停止使用 Machine,您可以考虑从您的环境设置中删除 VirtualBox,并利用 xhyve 的性能提升 - 包含在 Desktop 中。

【讨论】:

    【解决方案4】:

    您可以打开终端并输入docker info,如果您的 Mac 上安装了 docker,它将为您提供有关 docker 的详细信息。

    如果显示command not found : docker,则表示您的 Mac 上没有安装 docker。

    【讨论】:

      【解决方案5】:

      您可以执行以下操作:

      docker info --format "{{.OperatingSystem}}" | grep -q "Docker for Mac"
      

      通过以下方式检查退出代码:

      if [[ $? -eq 0 ]]; then
          echo "Docker for Mac!"
      else
          echo "Something else"
      fi
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2010-11-11
      • 2016-12-18
      • 1970-01-01
      • 2022-10-17
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多