重置Docker机器在本地机器上运行Docker命令

我现在正在学Docker,而且遇到了令人困惑的事情。 我开始使用docker-machine ,这对于创build一个本地VM并在Digital Ocean上启动服务器非常有用。 但是,我现在想要返回一个状态,在我的本地机器上执行docker命令execue,以便我可以添加function,构build和推送我的Docker回购。

我知道如何改变使用docker-machine env其他机器,但我怎么回到没有活动的机器? 如果我重新启动docker发生这种情况,但我不想一直重新启动docker。 似乎应该有一个这样的命令?

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

执行eval $(docker-machine env DOCKER_MACHINE_NAME)将只设置一堆环境variables,即:

  • DOCKER_TLS_VERIFY = “1”
  • DOCKER_HOST = “TCP:// XYZW:2376”
  • DOCKER_CERT_PATH = “/机器/设备/ DOCKER_MACHINE_NAME”
  • DOCKER_MACHINE_NAME = “DOCKER_MACHINE_NAME”

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

所以你需要做的是取消它们,或者退出当前的shell会话。

使用新的shell会话

可能最简单的方法是在调用docker-machine env之前启动一个新的shell,以便这些variables只能在其中设置。

 #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 ... 

重置DOCKERvariables(在你当前的shell中)

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

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

或者使用“–unset”选项来“env”(就像@thaJeztah已经指出的那样

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

这也在docker机手册中有logging 。

使用包装脚本

如果您只需要偶尔对远程计算机运行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_variables集,只需执行:

 env|grep DOCKER 

取消设置由docker-machine 设置的环境variables,请按照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)应该取消设置eval $(docker-machine env --unset)设置的所有环境variables。