如何检测是否安装了 docker for mac?

How can I detect if docker for mac is installed?

我有一些 makefiles 其中大部分内容应该 运行 无需配置。这些 makefile 过去使用过 docker-machine

有没有办法在 bash 中检测用户是否使用 docker 桌面作为 mac 而不是 docker-mac海因 ?

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

  • DOCKER_HOST
  • DOCKER_MACHINE_NAME
  • DOCKER_TLS_VERIFY
  • DOCKER_CERT_PATH

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

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


您还可以在 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 version --format "{{.Server.KernelVersion}}") == *-moby ]]

您可以执行以下操作:

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

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

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

These makefiles have used docker-machine in the past.

如果可能,请停止使用 Machine。最近 Docker Mac installation instructions 注意 Docker 工具箱,但建议它现在是 legacy。考虑重构您的脚本以检查 Docker 桌面:

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 台式机,您应该寻找的是
  • -z returns 如果字符串的长度为 0(来自 man bash),则为真。
  • $(...) 是执行 grep 而不输出到 stdout.
  • 的命令替换

Joe for which cleanly filters the output from docker info. And if you refactor to stop using Machine you can consider removing VirtualBox from your environment setup and leverage the performance gains of xhyve 致敬 – 包含在桌面版中。

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

如果显示 command not found : docker 则表示您的 mac.

上没有安装 docker