eval " $(docker-машина env по умолчанию)"

у меня проблемы с запуском docker с docker-compose.

когда я запускаю docker-compose -f dev.yml build Я после ошибки >

Building postgres
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.

однако, если я запускаю docker-machine ls машина явно вверх >

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1

я исправил ошибку eval "$(docker-machine env default)" после чего docker-compose -f dev.yml build успешно завершается.

мой вопрос почему такая работа, что на самом деле происходит и как это исправить?

также это безопасный способ исправить это? Сейчас это только мой ноутбук, но эти контейнеры должны попасть на серверы компании в ближайшем будущем.

Я не очень свободно говорю с bash, но мне всегда говорили не бежать eval и особенно не запускать eval с "

2 ответов


при выполнении docker команды, CLI подключается к API демона Docker, и это API, который фактически выполняет работу. Вы можете управлять удаленными хостами Docker из локального CLI, изменяя сведения о соединении API, которые Docker хранит в переменных среды на клиенте, где выполняется CLI.

С Docker Machine ваш Docker engine работает в виртуальной машине, которая фактически является удаленной машиной, поэтому ваш локальный CLI должен быть настроен для подключения к ней. Машина Докер знает детали соединения для двигателей, которыми он управляет, поэтому работает docker-machine env default распечатывает детали для default машины. Вывод примерно такой:

 $ docker-machine env default
 export DOCKER_TLS_VERIFY="1"
 export DOCKER_HOST="tcp://172.16.62.130:2376"
 export DOCKER_CERT_PATH="/Users/elton/.docker/machine/machines/default"
 export DOCKER_MACHINE_NAME="default"

используя eval выполняет каждый из этих export команды, а не просто писать их на консоли, так это быстрый способ настройки переменных среды.

вы можете отменить его и сбросить локальную среду с docker-machine env --unset, что дает вам выход для сброса окружающей среды (так что CLI попытается подключиться к локальному движку Docker).


это действительно ожидаемый способ использовать Docker на машине, которая изначально не поддерживает Docker, например, в Windows или Mac OS X.

документация Docker включает этот шаг в свое описание для использования машины Docker здесь:https://docs.docker.com/machine/get-started/

что делает этот шаг (я предлагаю вам также попробовать это самостоятельно):

  • Run docker-machine env default.
  • возьмите вывод этой команды и выполните его в текущего сеанса оболочки.

Если вы запустите docker-machine env default вы увидите, что он просто предлагает установить некоторые переменные среды, которые позволяют командам Docker найти виртуальную машину, работающую с демоном Docker. Без этих переменных Docker просто не знает, как общаться с демоном Docker.

в серверной среде (Linux) вам не понадобится машина Docker, так как ядро Linux изначально поддерживает запуск контейнеров. Вам нужен только Docker Машина (небольшая виртуальная машина с ядром Linux) в операционных системах, которые изначально не поддерживают запущенные контейнеры.