【问题标题】:Pass a command to docker vm via SSH通过 SSH 将命令传递给 docker vm
【发布时间】:2018-04-18 02:51:19
【问题描述】:

如何使用单个命令通过 ssh 将以下指令发送到 docker virtualbox vm?

我想从 vm 外部运行一个命令,以便该命令可以嵌入到脚本中。但我似乎能做的就是连接交互式控制台。

具体如下:


可用的虚拟机:

我首先获取可用虚拟机的列表,如下所示:

[root@localhost ~]# docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.102:2376           v18.04.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.04.0-ce


抛出的错误:

接下来,我尝试使用本教程中的命令将命令发送到列出的 VM 中,如下所示:

[root@localhost ~]# docker-machine ssh myvm1 “docker swarm init --advertise-addr tcp://192.168.99.102:2377”
sh: “docker: not found
exit status 127

请注意,该命令会引发错误,因为在将命令作为参数传递到 VM 时找不到 docker 命令。


交互式控制台的工作原理

为了隔离问题,我检查以确保如果我手动登录交互式控制台,相同的命令是否有效,如下所示:

[root@localhost ~]# docker-machine ssh myvm1
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.04.0-ce, build HEAD : b8a34c0 - Wed Apr 11 17:00:55 UTC 2018
Docker version 18.04.0-ce, build 3d479c0

docker@myvm1:~$ docker swarm init --advertise-addr 192.168.99.102:2377
Swarm initialized: current node (gnrj1sbx36j8lf82o9bk6yz58) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-57xhc6p7xpmeicznpfc7i6fhz9p9tdt48m5dqhqj3v4u42217g-50vj218ggzvm1shbuj3ei4brb 192.168.99.102:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

docker@myvm1:~$

鉴于从INSIDE VM 控制台调用该命令时该命令有效,需要哪些特定步骤才能使该命令在从VM 外部作为参数传递时有效?

主机是 CentOS 7 服务器,以防影响 docker 机器 CLI 命令。

【问题讨论】:

    标签: docker centos virtualbox docker-swarm docker-machine


    【解决方案1】:

    找不到的命令是“docker 而不是docker

    尝试从这里输入或复制:

    docker-machine ssh myvm1 "docker swarm init --advertise-addr tcp://192.168.99.102:2377"

    当我从某些网站复制和粘贴代码时,我经常遇到这个问题。他们通常使用 而不是"

    弯引号

    在 shell(通常用于编码)中,我们只使用常规引号(双引号 "单引号 ')。

    对于写作(例如在 Word 中),引号被替换为 弯引号 是很常见的。但是这种类型的引号与常规引号的解释方式不同(它们是不同的字符)。

    “docker ...“"docker ..."不一样

    【讨论】:

    • 好的,所以将你的剪切并粘贴到 Notepad++ 中,然后从 Notepad++ 剪切并粘贴到 Putty WORKED。但是将 Notepad++ 与 OP DID NOT WORK 中的另一个示例一起使用。在肉眼看来,这些命令对我来说是一样的。您能否详细说明为什么您的版本有效?详细说明将使这对其他读者更有用。 +1 让某些东西至少可以工作。
    • 当然。谢谢你的建议。我会更好地解释这个问题。
    • 答案可能很简单,只需手动重新键入每个引号即可。可能是由于网络教程版本中与引号的十六进制表示损坏有关的一些问题。
    • 这是关于花引号的。只是解释得更好:)
    猜你喜欢
    • 2016-07-25
    • 2016-11-30
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多