在我目前的团队中,我们仍在从Docker Toolbox过渡到Docker Desktop for Windows。我们的许多脚本仍假设你在VirtualBox上运行Docker Toolbox(比如如何安装驱动器,斜杠或驱动器名称如何适用于这些安装)。
有没有一种可靠的方法可以从脚本内部判断docker
是来自Docker Toolbox还是来自Docker Desktop for Windows?
工具箱通过docker-machine
工作。 docker
客户端指向虚拟机的方式是通过运行docker-machine env default
可以看到的许多环境变量
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=/user/.docker/machine/machines/default
SET DOCKER_MACHINE_NAME=default
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i
Docker for Mac直接连接到映射到Docker VM的/var/run/docker.sock
套接字,因此很容易通过缺少环境变量来检测。
我相信Docker for Windows以相同的方式使用命名管道(//./pipe/docker_engine
),所以你也应该能够通过环境中缺少DOCKER_HOST
来判断。
如果Docker for Windows仍然使用该环境,则Toolbox和Docker for Windows变量之间将存在差异。 DOCKER_HOST
将在不同的范围内。 DOCKER_CERT_PATH
不包括machine
等。
#!/usr/bin/env bash
dockerIsToolBox() {
if [ "${DOCKER_TOOLBOX_INSTALL_PATH}" ];then
echo true
else
echo false
fi
}