我有一些 makefile,其中大部分内容无需配置即可运行。这些 makefile 过去使用过
docker-machine
。
有没有办法在 Bash 中检测用户是否使用 Docker Desktop for Mac 而不是
docker-machine
?
迄今为止我发现的最干净的方法是:
[[ $(docker version --format "{{.Server.KernelVersion}}") == *-moby ]]
最好的方法是检查 DOCKER 环境变量是否存在:
所有这四个都是在
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 info
,如果您的 Mac 上安装了 docker,它将为您提供有关 docker 的详细信息。
如果显示
command not found : docker
那么这意味着你的 mac 上没有安装 docker。
这些 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
进行查询。grep 'Docker Desktop'
。-z
),
man bash
返回 true。$(...)
是命令替换,执行 grep
而不输出到 stdout
。docker info
的输出。如果您重构以停止使用 Machine,您可以考虑从环境设置中删除 VirtualBox,并利用 xhyve
的性能增益 – 包含在 Desktop 中。
您可以执行以下操作:
docker info --format "{{.OperatingSystem}}" | grep -q "Docker for Mac"
通过以下方式检查退出代码:
if [[ $? -eq 0 ]]; then
echo "Docker for Mac!"
else
echo "Something else"
fi