做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”时,它会识别它们并连接到远程机器。
所以你需要做的是取消设置它们,或者只是退出你当前的 shell 会话。
使用新的 shell 会话
您可以采取的最简单的方法可能是在调用 docker-machine env 之前启动一个新的 shell,这样这些变量只会在其中设置。
#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变量(在你当前的shell中)
或者,您可以直接重置它们,而不退出当前的 shell,如下所示:
unset `env|grep DOCKER|cut -d\= -f1`
或对“env”使用“--unset”选项(因为@thaJeztah 已经有pointed out)
eval "$(docker-machine env -u)"
这也记录在 docker-machine manual。
使用包装脚本
如果你只需要偶尔对远程机器运行 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 命令),而不会干扰您当前的 shell 会话。
旁注
要检查当前活动的 DOCKER_ 变量集,只需执行以下操作:
env|grep DOCKER