linux – eval $(docker-machine env myvm1)不会切换到shell来与myvm1通信

伙计们,

我在这里遵循Docker教程:https://docs.docker.com/get-started/part4/#configure-a-docker-machine-shell-to-the-swarm-manager并在运行此特定命令时遇到阻力:

eval $(docker-machine env myvm1)

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

eval $(sudo docker-machine env myvm1)

我从命令行得到没有输出告诉我已经完成的任何操作以及我何时运行:

sudo docker-machine ls

我看到myvm1没有按预期的活动状态.我知道这一步没有必要,但我想了解为什么命令不起作用并尝试修复它.

我正在运行码头17.09.0-ce

在Ubuntu 16.04 LTS上

zsh shell(尝试切换到bash)

顺便说一句,这只是在我的本地机器上,而不是服务器.

任何帮助将非常感激.

最佳答案
如果你在sudo的远端运行eval,那就不会出错了:

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

否则,通过评估docker-machine env的输出而设置的环境变量不一定(禁止某些特定的/ etc / sudoers配置)传播到未来的docker-machine调用.

如果你想用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

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...