eval $(docker-machine env myvm1)不会切换到shell以与myvm1进行通信

伙计们,

我在这里跟随Docker教程: https : //docs.docker.com/get-started/part4/#configure-a-docker-machine-shell-to-the-warm-manager,并在运行时抵抗阻力这个特别的命令:

eval $(docker-machine env myvm1) 

我实际上正在运行(如上所述,但增加了sudo)。

 eval $(sudo docker-machine env myvm1) 

我没有从命令行输出告诉我什么已经完成,当我运行:

 sudo docker-machine ls 

我发现myvm1并没有像预期的那样处于活动状态。 我知道这一步是不必要的,但我想了解为什么命令不起作用,并试图解决它。

我正在运行docker17.09.0-ce

在Ubuntu 16.04 LTS上

zsh shell(已经尝试切换到bash)

顺便说一下,这只是我的本地机器,而不是服务器。

任何帮助将非常感激。

如果你在sudo的远端运行eval ,那么sudo

 sudo sh -c 'eval "$(docker-machine env myvm1)"; docker-machine ls' 

否则,通过eval docker-machine env的输出设置的环境variables不一定会传播到未来的docker-machine调用中(不包括一些非常特定的/etc/sudoersconfiguration)。


如果你想用shell函数自动执行,可以这样做:

 # docker-env sudo; usage: desudo vm-name command-to-run desudo() { local cmd1 cmd2 printf -v cmd1 'eval "$(docker-machine env %q)"' "$1"; shift printf -v cmd2 '%q ' "$@" sudo bash -c "${cmd1} && exec ${cmd2}" } 

用作:

 desudo vm1 docker-machine ls