脚本如何区分 Docker Toolbox 和 Docker for Windows?

How can a script distinguish Docker Toolbox and Docker for Windows?

在我目前的团队中,我们仍在从 Docker Toolbox 过渡到 Docker Desktop for Windows 。我们的许多脚本仍然假设您是 VirtualBox 上的 运行 Docker 工具箱(例如如何安装驱动器,斜线或驱动器名称如何用于这些安装)。

是否有可靠的方法从脚本内部判断 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 仍然使用环境,工具箱和 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
}