我有一些makefiles
大多数东西应该在没有配置的情况下运行的地方。这些makefile过去曾使用docker-machine
过。
有没有办法检测bash
用户是否使用docker desktop for mac而不是docker-machine?
我有一些makefiles
大多数东西应该在没有配置的情况下运行的地方。这些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
结果的一致性。
这些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,并利用xhyve
Desktop 附带的性能提升。
您可以打开终端并输入docker info
,如果它安装在您的 Mac 上,它将为您提供有关 docker 的详细信息。
如果它说command not found : docker
那么这意味着你没有在你的 mac 上安装 docker。
您可以执行以下操作:
docker info --format "{{.OperatingSystem}}" | grep -q "Docker for Mac"
通过以下方式检查退出代码:
if [[ $? -eq 0 ]]; then
echo "Docker for Mac!"
else
echo "Something else"
fi