【问题标题】:How do I SSH into the boot2docker host vm that the Vagrant 1.6 Docker Provider sets up?如何通过 SSH 连接到 Vagrant 1.6 Docker Provider 设置的 boot2docker 主机 vm?
【发布时间】:2014-08-08 18:37:24
【问题描述】:

我在 OSX 上,我希望能够通过 SSH 连接到主机 vm,以便:

  1. 访问本地 docker 环境。这有助于理解和调试端口转发问题。
  2. Vagrant rsync 似乎留下了许多未使用的同步目录,这些目录占用了我想要恢复的磁盘空间。

需要明确的是,这个问题不是关于 ssh:ing 进入 Vagrant 提供者创建的 docker 容器,而是进入 Vagrant 创建的中间 boot2docker 主机 vm。

我知道一种解决方法是不使用默认 boot2docker 作为主机 vm(如答案 here 中所述),但这不是这个问题的目的。

【问题讨论】:

  • vagrant ssh 呢?
  • 这将 ssh 进入 Vagrant docker 提供者提供的 docker 容器,但不会进入 boot2docker 主机 vm 本身

标签: vagrant docker boot2docker


【解决方案1】:

Vagrant 的 boot2docker 保存了 boot2docker 的 ssh 用户名和密码。

SSH 进入虚拟机

$ boot2docker ssh

Boot2Docker 使用生成的 SSH 密钥自动登录,但如果你想通过 SSH 登录 手动机器(或者您没有使用boot2docker 托管VM),凭据是:

user: docker
pass: tcuser

https://github.com/boot2docker/boot2docker#ssh-into-vm

端口默认从本地端口2022转发。您可以验证这一点:

$ VBoxManage list vms | grep docker
"docker-host_default_1234567890000_1234" {3d66ecf6-4539-47ca-afd2-66f953cd9a3e}
$ VBoxManage showvminfo docker-host_default_1234567890000_1234 | grep ssh
NIC 1 Rule(1):   name = ssh, protocol = tcp, host ip = 127.0.0.1, host port = 2022, guest ip = , guest port = 22

然后登录:

$ ssh docker@localhost -p 2022
docker@localhost's password: tcuser
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
docker@boot2docker:~$ 

【讨论】:

  • 在最新的 Docker 中这已从 boot2docker 更改为 docker-machine
  • 具体来说,现在是docker-machine ssh default
  • 如果您想从 mobaXterm 或任何其他 ssh 客户端进行 ssh,这会有所帮助
【解决方案2】:

2015 年 10 月:不推荐使用 Boot2docker,取而代之的是 docker-machine。登录:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376   

$ docker-machine ssh default

【讨论】:

  • 这是目前最简单和最新的方法。
【解决方案3】:

您可以使用vagrant ssh docker-host-id ssh 进入 docker 主机,但首先您需要知道 docker-host-id。
您可以使用vagrant global-status 命令获取所有活动 Vagrant 环境的列表。
要获取 docker-host id,您可以使用 grep 进行过滤:

vagrant global-status | grep docker-host

您将获得类似于以下内容的输出:

68f58d0  default  virtualbox running   /Users/yourUser/.vagrant.d/data/docker-host

复制第一列id,然后ssh到docker-host:

vagrant ssh 68f58d0

vagrant global status docs

【讨论】:

  • 我相信这是最好的答案。我有“常规”boot2docker,我有 Vagrant 启动的 boot2docker。其他答案将我连接到“常规”boot2docker 机器,而不是 Vagrant 正在使用的机器。
【解决方案4】:

您也可以放弃使用boot2dockerssh 函数,像这样“手动”执行:

$ ssh \
-i $HOME/.ssh/id_boot2docker \
-p $(boot2docker config 2>&1 | awk '/SSHPort/ {print $3}') \
docker@localhost

-p 的参数通常是端口 2022,但上面显示了如何根据需要以编程方式确定这一点。

【讨论】:

    【解决方案5】:

    您可以直接使用 SSH:

    ssh docker@$(boot2docker ip)
    

    (密码:tcuser,见https://github.com/boot2docker/boot2docker#ssh-into-vm


    您还可以将您的公钥复制/粘贴到 boot2docker 机器,这样您就不需要每次都输入密码:

    cat ~/.ssh/id_rsa.pub | ssh docker@$(boot2docker ip) 'cat - >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys'
    

    【讨论】:

    • 您也可以使用生成的识别文件。 "ssh -i ~/.ssh/id_boot2docker docker@$(boot2docker ip)"
    【解决方案6】:

    对于带有 vagrant 密码的 vagrant 主机:

    ssh -p 2222 vagrant@localhost
    

    否则使用 tcuser 密码:

    ssh -p 2222 docker@localhost
    

    Here 提供了更多关于为什么会这样的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2017-05-24
      • 2014-09-11
      • 2015-03-28
      相关资源
      最近更新 更多