如何检测 macOS 版 Docker 是否已安装?

问题描述 投票:0回答:5

我有一些 makefile,其中大部分内容无需配置即可运行。这些 makefile 过去使用过

docker-machine

有没有办法在 Bash 中检测用户是否使用 Docker Desktop for Mac 而不是

docker-machine

docker docker-machine docker-for-mac docker-desktop
5个回答
5
投票

迄今为止我发现的最干净的方法是:

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

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
结果的一致性。


2
投票

您可以打开终端并只需输入

docker info
,如果您的 Mac 上安装了 docker,它将为您提供有关 docker 的详细信息。

如果显示

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


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

Joe致敬,因为他的答案干净地过滤了

docker info
的输出。如果您重构以停止使用 Machine,您可以考虑从环境设置中删除 VirtualBox,并利用
xhyve
的性能增益 – 包含在 Desktop 中。


0
投票

您可以执行以下操作:

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

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

if [[ $? -eq 0 ]]; then
    echo "Docker for Mac!"
else
    echo "Something else"
fi
© www.soinside.com 2019 - 2024. All rights reserved.