En mi equipo actual, todavía estamos haciendo la transición de Docker Toolbox a Docker Desktop para Windows . Muchas de nuestras secuencias de comandos aún asumen que está ejecutando Docker Toolbox en VirtualBox (por ejemplo, cómo montar unidades, cómo funcionan las barras o los nombres de las unidades para esos montajes).
¿Existe una manera confiable de saber, desde dentro de un script, si docker proviene de Docker Toolbox o Docker Desktop para Windows?
#!/usr/bin/env bash dockerIsToolBox() { if [ "${DOCKER_TOOLBOX_INSTALL_PATH}" ];then echo true else echo false fi }Toolbox funciona a través docker-machine . La forma en que el cliente docker se dirige a la máquina virtual es a través de una serie de variables de entorno que puede ver ejecutando 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 para Mac se conecta directamente al socket /var/run/docker.sock que está asignado a la VM de Docker, por lo que es fácil de detectar por la falta de variables de entorno.
Creo que Docker para Windows usa una tubería con nombre de la misma manera ( //./pipe/docker_engine ), por lo que también debería poder darse cuenta por la falta de DOCKER_HOST en el entorno.
Si Docker para Windows todavía usa el entorno, habrá diferencias entre las variables Toolbox y Docker para Windows. DOCKER_HOST estaría en un rango diferente. DOCKER_CERT_PATH no incluirá machine etc.