6

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

有没有办法检测bash用户是否使用docker desktop for mac而不是docker-machine

4

5 回答 5

5

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

[[ $(docker version --format "{{.Server.KernelVersion}}") == *-moby ]]
于 2016-10-24T22:42:53.583 回答
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结果的一致性。

于 2016-07-06T13:20:19.780 回答
1

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

如果可能,请停止使用机器。最近的 Docker for Mac安装说明记录了 Docker Toolbox,但建议它现在是遗留的。考虑重构脚本以检查 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.
  • grep 'Docker Desktop'如果您正在运行 Docker Desktop,那么您应该寻找的是什么。
  • -z如果字符串的长度为 0(从man bash),则返回 true。
  • $(...)是命令替换,它执行grep而不输出到stdout.

Joe提示他的答案,该答案干净地过滤了来自docker info. 如果您重构以停止使用 Machine,您可以考虑从您的环境设置中删除 VirtualBox,并利用xhyveDesktop 附带的性能提升。

于 2019-10-18T10:37:25.390 回答
1

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

如果它说command not found : docker那么这意味着你没有在你的 mac 上安装 docker。

于 2021-10-26T10:07:18.857 回答
0

您可以执行以下操作:

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

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

if [[ $? -eq 0 ]]; then
    echo "Docker for Mac!"
else
    echo "Something else"
fi
于 2018-03-13T13:40:31.140 回答