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

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...