重置Docker Machine以在我的本地计算机上运行Docker命令

bou*_*erz 5 docker docker-machine

我现在正在学习码头工作,我遇到了令人困惑的事情.我开始使用docker-machine,这非常适合创建本地VM并在Digital Ocean上启动服务器.但是,我现在想要返回到docker命令在我的本地机器上执行的状态,以便我可以添加功能,构建和推送我的docker repo.

我知道如何更换到其他机器使用docker-machine env,但我如何回到没有活动的机器?如果我重启docker会发生这种情况,但我不想一直重启docker.似乎应该有一个命令吗?

只是为了澄清,我不是想连接到我的default机器.我希望docker命令在我的机器上执行,就像我在设置Docker Machine之前一样.

zep*_*lin 9

这样做eval $(docker-machine env DOCKER_MACHINE_NAME)只会设置一堆环境变量,即:

  • DOCKER_TLS_VERIFY="1"
  • DOCKER_HOST="tcp://XYZW:2376"
  • DOCKER_CERT_PATH="/machine/machines/DOCKER_MACHINE_NAME"
  • DOCKER_MACHINE_NAME="DOCKER_MACHINE_NAME"

然后当您使用这些设置运行“docker”时,它会识别它们并连接到远程机器。

因此,您需要做的是取消设置它们,或者只是退出当前的 shell 会话。

使用新的 shell 会话

您可以采取的最简单的方法可能是在调用之前启动一个新的 shell 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
...
Run Code Online (Sandbox Code Playgroud)

重置DOCKER变量(在您当前的 shell 中)

或者,您可以重置它们,而无需退出当前的 shell,如下所示:

unset `env|grep DOCKER|cut -d\= -f1`
Run Code Online (Sandbox Code Playgroud)

或者使用“--unset”选项来“env”(正如@thaJeztah 已经指出的那样)

eval "$(docker-machine env -u)"
Run Code Online (Sandbox Code Playgroud)

这也记录在 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 "${@}"
Run Code Online (Sandbox Code Playgroud)

然后可以像这样调用:

./rdocker my_machine ps
Run Code Online (Sandbox Code Playgroud)

获取在my_machine 上运行的容器列表(或执行任何其他Docker命令),而不会干扰您当前的 shell 会话。


边注

要检查当前活动的DOCKER_变量集,只需执行以下操作:

env|grep DOCKER
Run Code Online (Sandbox Code Playgroud)


tha*_*tah 5

要取消设置的环境变量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)
Run Code Online (Sandbox Code Playgroud)

所以运行eval $(docker-machine env --unset)应该取消设置docker-machine设置的所有环境变量.