Как я могу определить, установлен ли Docker для Mac?

У меня есть несколько make-файлов, где большинство вещей должно работать без конфигурации. Эти make-файлы использовали докер-машину в прошлом.

Есть ли возможность обнаружить в bash, использует ли пользователь docker для mac вместо docker-machine?

6 ответов

Решение

Лучший способ - проверить наличие переменных окружения DOCKER:

  • DOCKER_HOST
  • DOCKER_MACHINE_NAME
  • DOCKER_TLS_VERIFY
  • DOCKER_CERT_PATH

Все четыре из них установлены, когда eval $(docker-machine env) запускается и требуется для использования с докер-машиной.

Бета-версия не требует установки какого-либо из них и фактически требует, чтобы вы сбросили их, чтобы они функционировали должным образом.


Вы также можете сделать проверку в docker info команда ищет "moby" (название докера для mac VM):

docker info | grep -q moby && echo "Docker for mac beta" || echo "Not docker for mac beta"

Это будет зависеть от последовательности в docker info результаты, однако.

Самый чистый способ, который я нашел до сих пор:

[[ $(docker version --format "{{.Server.KernelVersion}}") == *-moby ]]

Вы можете открыть терминал и просто ввести docker info и он предоставит вам подробную информацию о докере, если он установлен на вашем Mac.

Если это говорит command not found : docker тогда это означает, что на вашем Mac не установлен докер.

Эти make-файлы использовали docker-machine в прошлом.

Если возможно, прекратите использование Machine. В последних инструкциях по установке Docker для 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' это то, что вам следует искать, если вы используете Docker Desktop.
  • -z возвращает истину, если длина строки равна 0 (от man bash).
  • $(...) подстановка команд, которая выполняет grep без вывода на stdout.

Совет Joe Alamo за его ответ, который четко фильтрует вывод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

Проверьте версию, установлена ​​она или нет. Таким образом вы узнаете, установлен ли он на вашем компьютере или нет. Введите это в свой терминал.

docker --version

Другие вопросы по тегам