Сбросить Docker Machine для запуска команд Docker на моем локальном компьютере

Я изучаю докер прямо сейчас, и я столкнулся с чем-то, что сбивает с толку. Я начал использовать docker-machine, который отлично подходил для создания локальной виртуальной машины и запуска сервера в Digital Ocean. Однако теперь я хочу вернуться в состояние, когда команды Docker выполняются на моем локальном компьютере, чтобы я мог добавлять функции, создавать и отправлять репозиторий Docker.

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

И просто чтобы уточнить, я не пытаюсь подключиться к моей default машине. Я хочу, чтобы команды Docker выполнялись на моей машине так же, как до того, как я настроил Docker Machine.


person boulderz    schedule 16.01.2017    source источник


Ответы (2)


Выполнение eval $(docker-machine env DOCKER_MACHINE_NAME) просто установит кучу переменных среды, а именно:

  • DOCKER_TLS_VERIFY="1"
  • DOCKER_HOST="tcp://X.Y.Z.W:2376"
  • DOCKER_CERT_PATH="/machine/machines/DOCKER_MACHINE_NAME"
  • DOCKER_MACHINE_NAME="DOCKER_MACHINE_NAME"

и когда вы затем запустите «докер» с этим набором, он распознает их и подключится к удаленной машине.

Итак, что вам нужно сделать, это отключить их или просто выйти из текущего сеанса оболочки.

Использовать новый сеанс оболочки

Вероятно, самый простой подход, который вы можете использовать, — это запустить новую оболочку перед вызовом docker-machine env, чтобы эти переменные устанавливались только внутри нее.

#start a new shell
bash 

#configure docker to connect to the remote machine
eval $(docker-machine env DOCKER_MACHINE_NAME)

#run some commands against the remote docker machine
docker ps
...

#once, done, return to the parent shell
exit

#run some commands against your local docker daemon
docker ps
...

Сбросить переменные DOCKER (в текущей оболочке)

Кроме того, вы можете просто сбросить их, не выходя из текущей оболочки, например:

unset `env|grep DOCKER|cut -d\= -f1`

или используйте параметр "--unset" для "env" (как указал @thaJeztah уже)

eval "$(docker-machine env -u)"

Это также описано в руководстве по docker-machine.

Используйте скрипт-оболочку

Если вам нужно только время от времени запускать команды docker на удаленных компьютерах, вы можете использовать простой скрипт-оболочку, подобный этому:

#!/bin/bash
DOCKER_MACHINE=$1
shift

if [ -z "$DOCKER_MACHINE" ] 
then
    echo "Usage: rdocker DOCKER_MACHINE COMMAND"
    exit 1
fi

eval $(docker-machine env "$DOCKER_MACHINE")
docker "${@}"

Который затем может быть вызван следующим образом:

./rdocker my_machine ps

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


Примечание

Чтобы проверить текущий активный набор переменных DOCKER_, просто выполните:

env|grep DOCKER
person zeppelin    schedule 16.01.2017
comment
Использование новой оболочки — это именно то, что я искал. Наверное, я должен был понять это сам. Это определенно способствует лучшему рабочему процессу. eval "$(docker-machine env -u)" полезен, если я случайно запускаю докер-машину вне оболочки, но я думаю, что это обходной путь, а не исправление. Благодарю вас! - person boulderz; 17.01.2017

Чтобы сбросить переменные среды, заданные параметром docker-machine, следуйте инструкциям, напечатанным параметром docker-machine env --unset;

unset DOCKER_TLS_VERIFY
unset DOCKER_HOST
unset DOCKER_CERT_PATH
unset DOCKER_MACHINE_NAME
unset DOCKER_API_VERSION
# Run this command to configure your shell: 
# eval $(docker-machine env --unset)

Таким образом, запуск eval $(docker-machine env --unset) должен сбросить все переменные среды, установленные докер-машиной.

person thaJeztah    schedule 17.01.2017