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) в операционных системах, которые изначально не поддерживают запущенные контейнеры.