Выполнение 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